Inspirado en este CMC
Dado un entero positivo mayor que 0, realice la siguiente operación en él:
- Si los diez dígitos individuales (
1234567890
) están en el número al menos una vez, envíe la cuenta y salga del programa - De lo contrario, duplique el número y repita, incrementando el conteo.
El recuento comienza en 0 y es el número de veces que se duplicó la entrada. Por ejemplo, si la entrada fuera 617283945, tendría que duplicarse una vez porque 1234567890 tiene los 10 dígitos.
Este es un código de golf, por lo que gana el código más corto. La entrada se puede tomar como una cadena, si lo desea.
Casos de prueba
input => output
617283945 => 1
2 => 67
66833 => 44
1234567890 => 0
100 => 51
42 => 55
n
exista algok
así quenk
sea pandigital? Me encantaría ver una prueba.Respuestas:
Python 3 , 39 bytes
Pruébalo en línea!
Salidas
False
para0
.fuente
J ,
2423 bytesPruébalo en línea!
Explicación
fuente
05AB1E ,
1110 bytes-1 byte gracias a scottinet
Pruébalo en línea! o como un conjunto de pruebas
fuente
use x
pero eso también es 10 ... Buena respuesta. Sex
eliminaría el pensamientoD
, pero es la misma idea.Perl 6 ,
3128 bytes (27 caracteres)-3 bytes gracias a @Joshua
Pruébalo en línea!
Explicación: sigue siendo la misma construcción para generar listas de forma recursiva. El primer elemento es el número dado (
$_
), cada elemento siguiente es 2 veces el anterior (2×*
- usamos ×, porque, aunque el carácter de 2 bytes, sigue siendo 1 byte más barato que2 * *
), y hacemos esto hasta que*.comb.unique>9
se cumpla la condición final de , es decir, cuando hay más de 9 caracteres únicos en el número. (Técnicamente, desglosamos la cadena en una lista de caracteres con.comb
, la forzamos a un conjunto con.Set
(por supuesto, los Conjuntos contienen cada elemento solo una vez) y la comparamos con 9, lo que fuerza el conjunto en contexto numérico, lo que a su vez da su número de elementos)Finalmente, restamos 1 de esta lista. Nuevamente, la lista se ve obligada a entrar en contexto numérico, por lo que lo que devolvemos es 1 menos que la longitud de esa lista.
fuente
.Set
lugar de.unique
guardar 3 bytes.JavaScript (ES6) + big.js ,
84747370 bytesGracias @ ConorO'Brien por guardar 10 bytes sugiriendo big.js lugar de bignumber.js
Gracias a @Rick Hitchcock por -1 byte
Gracias a @Shaggy por -3 bytes
Toma la entrada como cadena; soporta hasta alrededor de 2 69 debido a la conversión automática de notación científica que se produce más allá de ese punto.
Fragmento de prueba
Rango infinito,
106888784 bytesAl usar la opción de configuración para deshabilitar efectivamente la notación científica al convertir números en cadenas, podemos tener un rango casi infinito.
Mostrar fragmento de código
fuente
BigNumber
bit usando big.js ?new
es opcional en ese. Se actualizará, gracias!f=n=>[..."0123456789"].every(d=>RegExp(d).test(c=Big(n)))?0:1+f(c.mul(2))
."4"+2**29
: tio.run/##BcGxDkAwEADQb2GQO41LNBZDbX7AKgbhKkSu0jZSX1/…Gelatina ,
12, 11 bytesPruébalo en línea!
Explicación:
fuente
Haskell , 46 bytes
Pruébalo en línea!
fuente
J , 43 bytes
Pruébalo en línea!
Define una función anónima. Recoge resultados bastante subóptimamente. ¡Mira la respuesta superior de millas aquí!
fuente
^:a:
:1#@}.+:^:(10>#@~.@":)^:a:
Haskell, 44 bytes
fuente
Clojure,
1158982 bytes-26 bytes simplemente usando una cadena para representar la lista de caracteres (duh, en retrospectiva), y cambiando de usar recursión a
loop
, lo que me permitió hacer un par de optimizaciones.-7 bytes al deshacerse de la llamada a
bigint
. Aparentemente solo necesitamos manejar la entrada que no causará un desbordamiento.Pregolfed:
fuente
every?
lugar deempty? (remove …
:#(loop[n % c 0](if(every?(set(str n))"1234567890")c(recur(* 2 n)(inc c)))))
Retina , 85 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Ligeramente optimizado para el tiempo de ejecución. Explicación:
Duplicar el número de entrada.
Deduplicar los dígitos en la primera copia.
Si quedan 10 dígitos, elimine ambos números, de lo contrario simplemente elimine la primera copia. Tenga en cuenta que eliminar ambos números hace que el resto del ciclo no funcione.
Coloque un
#
antes de los dígitos grandes.Duplica cada dígito.
Añadir en los acarreos.
Tratar con un llevar líder.
Agregue un
@
bucle y hasta que se encuentren los 10 dígitos.Imprime el número de
@
s agregados.fuente
APL (Dyalog Unicode) , 19 + 2 = 21 bytes
Pruébalo en línea!
Este es un diádica
Dfn
( d directo teléfono f unctio n ), tomando 0 como su argumento izquierda y el número entero como la derecha. Como se supone que la entrada es solo el número entero, agregué 2 bytes para el argumento0∘
al recuento de bytes.f←
no está incluido en el recuento de bytes, ya que no es necesario . Simplemente hace que sea más fácil construir los casos de prueba.Cómo funciona:
Los encabezados: los eliminé del conteo de bytes después de conversar en la sala de APL, ya que la función hace lo que se supone que debe hacer y los resultados solo son incorrectos debido a la configuración predeterminada de REPL de APL.
⎕FR←1287
Establece la representación de F loat R en decimal de 128 bits (7 es el código para decimal en REPL de APL).⎕PP←34
Establece el P rint P recision a 34 dígitos. Ambos son necesarios, ya que la representación predeterminada de APL para números grandes los transforma en notación científica (por ejemplo, 3.14159265359E15) que desordenan el código a lo grande.fuente
Java 8,
1321108774 bytes-57 bytes gracias a @ OlivierGrégoire .
Explicación:
Pruébalo aquí. (Nota: el caso de prueba para
2
está desactivado porque debería detenerse en 2 68 , pero el tamaño delong
está limitado a 2 63 -1.)La respuesta anterior de 132 bytes utiliza una
String
entrada y expresión regular:Pruébalo aquí. (Nota: el caso de prueba para
2
está deshabilitado porque causa una StackOverflowException debido a una recursión ligeramente excesiva).La expresión regular total para verificar si la Cadena contiene los 9 dígitos se convierte en
^(?=.*0)(?=.*1)(?=.*2)(?=.*3)(?=.*4)(?=.*5)(?=.*6)(?=.*7)(?=.*8)(?=.*9).*$
, que utiliza una anticipación positiva para toda la Cadena.fuente
2^68
como primer número pandigital, pero los largos en Java se limitan a2^63-1
.reduce
/(?:.*?(\d)(?!.*\1)){10}
Casco , 10 bytes
Pruébalo en línea!
Explicación
fuente
Mathematica,
5948474638 bytes-9 bytes gracias a Jenny_mathy.
¡Pruébelo en línea usando Mathics!
fuente
a
funcionará pero `a` no lo hará.Print/@f/@{617283945,2,66833,1234567890,100,42}
R , 74 bytes
Pruébalo en línea! Tenga en cuenta que R dará una respuesta incorrecta
f(2)
debido a las limitaciones de cómo el lenguaje almacena enteros grandes.Explicación: Para la prueba de pandigitalidad, la entrada se coacciona a un vector de caracteres uniéndose con una cadena vacía y luego dividida en dígitos individuales. Luego verificamos si todos los 0: 9 están presentes en el vector resultante; si no, incrementamos el contador, duplicamos la entrada y repetimos.
El contador usa F que se inicializa como FALSO. Para asegurarnos de que sea forzado a numérico, multiplicamos por uno antes de regresar.
fuente
c(x,"")
es un buen truco parael(strsplit(...))
PowerShell ,
7069 bytesPruébalo en línea!
(Casi el doble de tiempo que la respuesta de Python: - \)
Toma datos
$args[0]
, los convierte como a[bigint]
, los guarda en$n
. Entra en unfor
bucle. Cada iteración verificamos si el número se$n
convierte en una cadena y luego en unachar
matriz, cuando estánGroup-Object
juntos, tiene un.count
-l
ess que oe
qual9
. Es decir, la única forma en que equivale a 10 es si al menos un dígito de cada número1234567890
está presente. En caso afirmativo, salimos del bucle. Si no, nosotros$n*=2
y continuamos. Cada iteración dentro del bucle, simplemente estamos incrementando$i
. Cuando salimos del bucle, simplemente salimos$i
.Tenga en cuenta que para entradas como
1234567890
donde ya se tiene en cuenta cada dígito, esto no generará nada, que es un valor falso en PowerShell y equivalente a0
cuando se convierte como un[int]
. Si eso no está bien, simplemente podemos poner un+
frente a la salida$i
para convertirlo explícitamente en un entero.Salvó un byte gracias a Roland Heath.
fuente
Pyth , 11 bytes
Banco de pruebas .
Primer número natural
T
dondeinput << T
cumple el requisito.fuente
Perl 5 , 52 + 1 (-p) = 53 bytes
Pruébalo en línea!
fuente
Perl, 43 + 1 bytes
Usando la
-p
bandera. Esto se basa en la solución proporcionada por Xcali arriba.fuente
Swift 4 , 111 bytes
Nota: No funcionará para x = 2, debido al desbordamiento.
Explicación: la entrada x se escribe primero en cadena. Luego Set () elimina los caracteres que se repiten. Luego se ordena para que coincida con el resultado. Si no coincide, x se duplica y el contador se incrementa.
fuente
Rubí,
46453938 bytesPruébalo en línea!
Actualizaciones:
def f n;
lugar dedef f(n);
.…[9]
lugar de….size==10
fuente
Japt , 15 bytes
Intentalo
Explicación
Entrada implícita de entero
U
.Crear una matriz de números enteros de
0
a99
y pasar cada uno a través de una función dondeX
es el elemento actual.U
multiplicado por 2 elevado al poder deX
.Obtenga el índice del primer elemento que devuelve verdadero cuando se pasa por la siguiente función.
Dividir en una matriz de dígitos y eliminar los duplicados.
Obtenga la longitud de la matriz y verifique la igualdad con
10
.Alternativa, 15 bytes
Intentalo
Explicación
Entrada implícita de entero
U
.Comenzando con
0
, devuelve el primer número que devuelve verdadero cuando se pasa por la siguiente función,X
siendo el número actual.Como arriba, multiplique
U
por 2 a la potencia deX
.Dividir en una matriz de dígitos, eliminar duplicados y volver a unir a un número entero.
Convierta en una cadena, obtenga la longitud y vuelva a convertir en un entero.
Verifique la igualdad con
10
.fuente
QBIC , 48 bytes, nc
Esto debería funcionar, en teoría. Sin embargo, en la práctica esto falla porque QBasic arroja números de diez dígitos (al menos necesarios para obtener todos los dígitos) a notación científica ... Debido a eso, lo he marcado como no competitivo.
Explicación
fuente
GNU dc, 61 bytes
La entrada se copia desde la parte superior de la pila (que de lo contrario debe estar vacía); la salida se empuja a la parte superior de la pila.
Explicación
Usamos la variable de matriz
a
, almacenando un 1a[d]
si el dígitod
está presente, de lo contrario volviendo a 0 allí. Usamos la extensión GNU~
para obtener el cociente y el resto en un solo comando.Como beneficio adicional, esto funcionará en bases numéricas arbitrarias (no solo decimales): simplemente configure la raíz de entrada según sea necesario (la constante
11
en la definición def
se leerá usando esa base numérica, por lo que es automáticamente correcta).Prueba
fuente
REXX, 57 bytes
fuente
q / kdb + , 33 bytes
Solución:
Ejemplos:
Explicación:
Todos los bytes están en la igualdad, podría ser capaz de jugar un poco más. Utiliza el
scan
adverbio de q :Notas:
Si pasamos al
k
indicador, entonces podemos tener una solución de 25 bytes. Convierte el número en una lista de caracteres:fuente