Un repdigit es un número natural que se puede escribir únicamente repitiendo el mismo dígito. Por ejemplo, 777
es un repdigit, ya que está compuesto únicamente por el dígito 7
repetido tres veces.
Sin embargo, esto no se limita simplemente a números decimales (base 10):
- Cada número de Mersenne (de la forma M n = 2 n -1 ) es un digito cuando se escribe en binario (base 2).
- Cada número es trivialmente un digito cuando se escribe en unario (base 1).
- Cada número
n
también se puede escribir trivialmente como el dígito11
de referencia en basen-1
(por ejemplo,17
cuando se escribe en hexadecimal (base 16)11
, y3
cuando se escribe en binario (base 2) también11
).
El desafío aquí es encontrar otras bases donde el número de entrada puede ser un digito.
Entrada
Un entero positivo x > 3
, en cualquier formato conveniente.
Salida
Un entero positivo b
con (x-1) > b > 1
donde la representación de x
en base b
es un digito.
- Si no
b
existe, salida0
o algún valor falso . - Si
b
existen varios de estos , puede generar uno o todos ellos.
Reglas
- La
(x-1) > b > 1
restricción es evitar las conversiones triviales a base unaria o "restar una". El número de salida se puede escribir en unario o en cualquier base conveniente, pero la base en sí no debe ser una de las conversiones triviales. - La entrada / salida puede ser a través de cualquier método adecuado .
- Se aplican restricciones de escapatoria estándar .
Ejemplos
In --> Out
11 --> 0 (or other falsey value)
23 --> 0 (or other falsey value)
55 --> 10 (since 55 is 55 in base 10)
90 --> 14 (since 90 is 66 in base 14 ... 17, 29, 44 also allowed)
91 --> 9 (since 91 is 111 in base 9 ... 12 also allowed)
code-golf
base-conversion
AdmBorkBork
fuente
fuente
b ≤ 36
(las funciones de conversión de base incorporadas en muchos idiomas no van más arriba)?b ≤ 36
que limita severamente el alcance de este problema, y todas las respuestas existentes manejan correctamente bases más grandes, por lo que voy a decir que no, no puede asumir un límite superiorb
más allá de lo que se da.Respuestas:
Jalea,
119 bytesDevuelve una lista de bases, que está vacía (falso) si no hay ninguna. Pruébalo en línea!
Cómo funciona
fuente
Pyth
1110Aparentemente, el unario de Pyth
q
busca una lista que tenga todos los valores únicos desde hace aproximadamente 10 días. Aparentemente, investigar los errores de Pyth mejora los puntajes de golf.Filtra la lista
[2..input-1)
si el conjunto único de dígitos de la entrada en esa base es longitud 1.Banco de pruebas
Explicación:
fuente
Rubí,
876963 bytesTuve que implementar la conversión de base a mano, ya que los componentes integrados de Ruby solo suben a la base 36 ...
Devoluciones
nil
por no encontradas.fuente
Python, 71
7278bytesSin recurrencia, solo prueba todas las bases y genera un conjunto de las que funcionan.
Es tentador codificar
b
yd
en un solo número, pero se necesitan demasiadas expresiones entre paréntesis para extraerlas. 77 bytes:72 bytes:
Emite el primero
b
que funciona, o0
si ninguno lo hace.Una unidad
x
de rep ded
dígitos dec
en baseb
tiene valorx==c*(b**d-1)/(b-1)
. Equivalentementex*(b-1)==c*(b**d-1)
.El valor
c
debe serx%b
, el último dígito. Sin embargo, no veo una manera de determinard
aritméticamente, por lo que el código prueba todas las posibilidades para ver si alguno de ellos funciona.Ahorró 5 bytes copiando el truco de Dennis de dar una salida falsey cuando
b
llegax-1
tomando el módulo de salidax-1
. Otro byte salvado de Dennis recordándome que la exponenciación inexplicablemente tiene mayor prioridad que~
.Una solución de igual longitud con en
in
lugar deany
.fuente
Ruby, 50 bytes.
Realmente me gustaría eliminar ese espacio molesto, pero como recién llegado a Ruby, todavía no estoy familiarizado con sus peculiaridades sintácticas.
fuente
b?
sería un nombre de método válido, por lo que no puede deshacerse del espacio.Emojicode , 214 bytes
(77 caracteres):
Imprime resultados en la base 9.
He tenido la intención de hacer un código de golf con emojicode durante un par de semanas, pero el lenguaje se ha vuelto lo suficientemente estable como para realmente funcionar con 😉. Como beneficio adicional, esta pregunta hace uso de la única funcionalidad que emojicode es realmente buena para: representar números enteros en otras bases.
Ungolfed (👴 es un comentario de línea en emojicode)
fuente
Python 2, 79 bytes
Pruébalo en Ideone .
Idea
Cualquier repdigit x de la base b> 1 y el dígito d <b satisface lo siguiente.
Como d <b , el mapa (b, d) ↦ cb + d es inyectivo.
Además, dado que b, x> 1 , tenemos c <x , entonces cb + d <cb + b = (c + 1) b ≤ xb .
Esto significa que, para encontrar valores adecuados para c y d para una base dada b , podemos iterar a través de todo i en [0, ..., bx) y comprobar si (b - 1) x == (i% b) (b i / b - 1) .
Código
El lambda con nombre f prueba si (b - 1) x está en el conjunto {(i% b) (b i / b - 1) | 0 ≤ i <bx} , comenzando con el valor b = 2 .
Si la prueba fue exitosa, devolvemos b .
De lo contrario, llamamos a f nuevamente, con las mismas x y b incrementadas en 1 .
Como b eventualmente puede llegar a x - 1 , tomamos el módulo de resultado final x - 1 para devolver 0 en este caso. Tenga en cuenta que esto no sucederá si b = 2 cumple la condición, ya que se devuelve sin recurrir. Sin embargo, la pregunta garantiza que b = 2 <x - 1 en este caso.
fuente
Perl 6,
454342 bytesExplicado (más o menos)
Como referencia, una variable
$^x
en{ ... }
es lo mismo que hacer-> $x { ... }
Polymod (TL; DR):
$n.polymod($b xx *)
le ofrece una lista inversa de dígitos / 'dígitos' para la$n
base$b
Polymod (de verdad): el método polymod es casi como una versión más poderosa de la
divmod
función de Python .$n.polymod(*@args)
divide $ n por cada valor en * @ args, agrega el resto ($n mod $x
) a la lista que devuelve y utiliza el cociente para la siguiente división. Siento que lo expliqué mal, así que aquí hay algunos ejemplos (escritos en Perl 6, pero lo suficientemente limpios como para que la mayoría los entienda):fuente
grep
método en lugar delfirst
método.Dyalog APL , 28 bytes
{
...⍵
... la}
función anónima que se aplicará ax
(representada por⍵
)b←1+⍳⍵-3
enteros de 2 - ⍵-2 almacenados comob
⍵{
...}¨
para cada elemento en b (⍵
), aplique la función{
...}
con x como argumento izquierdo,⍺
⍵⊥⍣¯1⊢⍺
convertir x a esa base1=≢∪
es 1 igual a la cuenta de dígito único?b/⍨
elementos de b donde true (que solo hay un dígito único).Casos de ejemplo
Si no existe una base, la salida está vacía (que es falsey), como puede ser demostrado por este programa:
Esto imprime 'Falso'
fuente
Pyth,
2619 bytesPruébalo aquí!
Agregaré una explicación después de jugar golf.Mire esta respuesta para una implementación y explicación más cortas.fuente
90
y91
en mis ejemplos!MATL ,
1514 bytesEsto funciona con la versión actual (14.0.0) del lenguaje / compilador.
Si no existe una base, la salida está vacía (que es falsey).
Pruébalo en línea!
fuente
Mathematica, 55 bytes
Función anónima, no demasiado complicada. Simplemente filtra las bases basadas en la repdigit-ness.
fuente
Python 2, 75 bytes
Un puerto de mi respuesta rubí. Imprime todas las bases válidas si existe alguna.
fuente
Julia, 45 bytes
Esta es una función anónima que acepta un entero y devuelve una matriz de enteros. Para llamarlo, asígnelo a una variable. Devolverá todas las bases aplicables o una matriz vacía. No hay problemas con grandes bases.
Primero generamos el rango inclusivo [2, n - 2], donde n es la entrada. Luego,
filter
la lista solo contiene enteros b para los cuales n en la base b tiene menos de 2 dígitos únicos. Para hacer esto, para cada número entero b en el rango, obtenemos los dígitos de n en la base b como una matriz , utilizamosdigits
elementos únicos∪
y utilizamos el índice del último elemento (es decir, la longitud)endof
.fuente
Brachylog , 12 bytes
Pruébalo en línea! (como generador!)
Toma entrada a través de la variable de entrada y emite una base a través de la variable de salida en el caso de que esto sea posible, de lo contrario falla. Al mismo tiempo, también funciona como un generador que genera una lista de todas las bases, donde esa lista puede estar vacía.
Idealmente, esto podría ser algo así
ḃ↙.=&>>
, posiblemente sacrificando la funcionalidad del generador en esa forma o una similar (ya que eventualmente llegaría a unario), pero a partir de ahora 12 bytes es lo más corto que sé cómo obtenerlo.fuente
Rubí ,
4643 bytesUtiliza el Entero # dígitos introducida en Ruby 2.4 para evitar la necesidad de dividir manualmente.
-3 bytes gracias a @Jordan.
Pruébalo en línea!
fuente
05AB1E , 7 bytes
Emite todos los valores posibles, o una lista vacía como valor de falsey (aunque las salidas técnicamente válidas también son falsey, ya que solo
1
es verdad en 05AB1E, y todo lo demás es falsey).Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Perl 5
-Minteger -na
, 63 bytesPruébalo en línea!
Emite todas las respuestas posibles o nada si no existe una solución.
fuente