De acuerdo con la página de Wikipedia en el número 69 , es de notar que 69 2 = 4,761 y 69 3 = 328,509 juntos usan todos los dígitos decimales. El número 69 es, de hecho, el número más bajo que satisface esta propiedad.
Por una razón similar, 32,043 es notable: 32,043 2 = 1,026,753,849 usa todos los dígitos decimales.
Si vamos a seguir hablando de números que son interesantes de esta manera, necesitaremos alguna notación.
Para la mayoría de los enteros n , las potencias n 2 , ..., n k usarán los diez dígitos decimales (sin contar los ceros iniciales) al menos una vez para valores suficientemente grandes de k . Si tiene precio, lo llamaremos el más bajo tales k la CUDDLE ( acumulativos dígitos decimales, menos Exponente ) de n .
Tarea
Escriba un programa o una función que acepte un número entero no negativo n como entrada y calcule y devuelva su CUDDLE .
Si n no tiene un CUDDLE , puede devolver cualquier cosa menos un entero positivo, incluido un error o una cadena vacía, siempre que su código se detenga eventualmente.
Casos de prueba
La columna izquierda es la entrada, la columna derecha es la salida.
0
1
2 15
3 10
4 10
5 11
6 12
7 7
8 5
9 6
10
11 7
12 6
13 6
14 7
15 9
16 5
17 7
18 4
19 5
20 15
26 8
60 12
69 3
128 3
150 9
200 15
32043 2
1234567890 3
Reglas adicionales
Su código debe funcionar para todas las entradas hasta 255 .
Tenga en cuenta que esto implica tratar con números bastante grandes. 20 15 ya es mayor que 2 64 .
Si imprime el resultado, puede ir seguido de un salto de línea.
Aplican reglas estándar de código de golf .
26->8
porque es el ejemplo más pequeño en el que la inclusiónn^1
da la respuesta incorrecta (de6
), un error que cometí en mi código.Respuestas:
Pyth, 16 bytes
Pruébelo en línea: Demostración o conjunto de pruebas
Como otras soluciones, uso 15 como límite superior. Creo que este es también el máximo abrazo . Probé todos los números hasta 10,000,000, y no hay ningún número con un CUDDLE mayor que 15.
Los números con CUDDLE > = 10 ya son bastante raros. Los únicos números con un CUDDLE de 15 son los números
2*10^k
. No hay números con un CUDDLE de 14 o 13, el CUDDLE 12 solo aparece para los números6*10^k
, el CUDDLE 11 solo para5*10^k
.Así que creo que este código funciona perfectamente para cualquier número natural.
Imprime un mensaje de error, si no hay solución.
Explicación:
fuente
Pitón 2, 56
Una solución recursiva. Cuenta los exponentes a
i
partir de2
y acumula los dígitos de potenciasn**i
en la cadenas
. Cuandos
tiene todos los dígitos diez, devolucionesTrue
, lo que equivale1
, y de otra manera y añade recursivamente1
. Esto resultó más corto que regresari
.Llamar a la función en un número sin CUDDLE termina con
Internal error: RangeError: Maximum call stack size exceeded
. Los números hasta255
ese resultado nunca necesitan más de 15 iteraciones.Debido al molesto hábito de Python 2 de agregar un
L
número grande, en realidad inicializamos la cadena de dígitosL
y verificamos si el tamaño establecido es al menos 11. Python 3 ahorra 2 caracteres al no necesitar esto, pero pierde 3 caracteres al usarstr
overticks. Python 3.5 guarda 2 caracteres más con el desempaquetado del conjunto, ahorrando un carácter sobre Python 2 en total:fuente
Ruby,
6765 caracteresFunciona casi instantáneamente para todos los casos de prueba, incluso los> 255.
Errores para números sin CUDDLE.
Explicación:
fuente
CJam, 28 bytes
Pruébalo en línea
Esto se basa en el hecho de que CUDDLE (si existe) nunca es mayor que 15 para el rango de entrada, como lo observó por primera vez @xnor.
Probablemente haya una mejor manera de producir la salida para el caso donde no hay solución. Actualizaré si pienso en algo.
Explicación:
fuente
Mathematica, 103 bytes
Parece que solo los poderes de 10 eventualmente no tendrían CUDDLEs, por lo que se omiten. La función mantiene una lista de dígitos vistos y se detiene cuando ya no tiene ceros.
Salida:
fuente
log_10(n)
es irracional, dado cualquier número entero positivok
existem
tal que la representación decimal den^m
aperturas conk
. Lo que significa que omitir los poderes de 10 (y 0) está bien :)JavaScript (ES6) 188
No está mal para un lenguaje que está limitado a enteros de 53 bits.
Pruebe a ejecutar el fragmento a continuación en un navegador que implemente EcmaScripts 6, incluidas las funciones de flecha y el operador de propagación (AFAIK Firefox)
fuente
PowerShell, 94 bytes
No hay nada demasiado inteligente al respecto, pero la conexión
sort -U[nique]
es una buena manera de imitar laset()
funcionalidad de Python para este tipo de uso, sin agregar explícitamente elementos a una tabla hash.p.ej
fuente
gawk 4, 73 + 5 para banderas = 78 bytes
Por cada dígito
0
bis9
que encuentra en los poderes de la entrada, se establece el bit que representa2^digit
ena
, hasta que los primeros 10 dígitos se encuentran (a == 1023 == 2^10-1
) o que ha habido más de 15 iteraciones.Debe llamarse con un separador de campo vacío y la marca -M para números grandes.
Jugueteando con esto, encontré las siguientes secuencias para los diferentes CUDDLE:
fuente