Un número indescriptible es un número que es divisible por siete o tiene siete como uno de sus dígitos. Un juego para niños es contar saltando números indescriptibles
1 2 3 4 5 6 ( ) 8 9 10 11 12 13 ( ) 15 16 ( ) 18 ...
La versión del juego de Cantor es la secuencia definida rellenando recursivamente la secuencia "1 2 3 4 5 6 () 8 ..." en los espacios () anteriores.
1 2 3 4 5 6 1 8 9 10 11 12 13 2 15 16 3 18 19 20 4 22 23 24 25 26 5 6 29 30 31 32 33 34 1 36 8 38 ...
Imprima / imprima al menos los primeros 7 ^ 7 números del juego de números indescriptible de Cantor ...
Si bien la definición se da de forma recursiva, no está obligado a utilizar la recursividad en el código.
Este es el código de golf , por lo que gana el programa con el recuento de bytes más corto.
Nota: La suma de números en 1 a 7 ^ 7 es 203511962727. Los últimos 10 números en ese rango son 823534 823535 221563 108068 823538 823539 823540 823541 823542 221565.
El volcado de Pastebin de los primeros 1000 itera: http://pastebin.com/Ksiu9Svf
Respuestas:
Pyth ,
252322 bytesGracias a @Maltysen por -2 bytes
Un programa que imprime una secuencia infinita.
Pruébalo en línea! (Salida enjuagada a intervalos y tiempos de espera en 1 minuto)
Cómo funciona
fuente
7
es primo, por lo que la divisibilidad se puede hacer mediante la verificación de la factorización prima, que encaja bien con la otra verificaciónPython 2,
77757470 bytesGracias a @MartinEnder para sugerir el límite de
9e5
que Ende r d trabajando después de un cambio.Gracias a @mschauer por sugerir una secuencia infinita, ahorrando 4 bytes.
Este es un generador que produce un flujo infinito de números.
fuente
if n%7<1or'7'in`n`else n
podría ser un poco más rápido (el mismo número de bytes), ya quen%7<1
es más rápido que verificar la cadena yor
está en cortocircuito. Es una pena queyield[n,next(i)][n%7<1or'7'in`n`]
no funcione.Perl,
47464139 bytesGuardado 5 bytes gracias a @Dada
¡Pruébelo en línea! TIO Nexus, ¡ahora con soporte Perl! Esto truncará la salida después de cierto punto, pero si tiene instalado Perl, puede ejecutarlo localmente para producir la salida completa.
El código hace uso de un par de peculiaridades extrañas de la sintaxis de Perl, por lo que detallaré cómo funciona a continuación.
Desglose del código:
fuente
say$a[@a]=$_=...
ganar 2 bytes si no me equivoco.$_
, me ahorra 5 bytes. ¡Gracias!PHP,
80 (Wahooka) 5754 bytesSi bien la idea es de Wahooka. Creo que mi versión es lo suficientemente diferente como para que sea una respuesta propia:
fuente
Haskell,
6766 bytesf
es una lista infinita de los números.Pruébalo en línea!
f
comienza una nueva iteración con1
un índice y qué número elegir de 0. Siempre que haya una brecha, tomamos una nueva iteración y elegimos suith
elemento y continuamos con la iteración actuali+1
. Si no hay una brecha, tomamos el número actualx
y continuamos sin aumentari
.Editar: -1 byte gracias a @BMO.
fuente
MATL ,
2625 bytesPruébalo en línea! con
9e5
reemplazado por9e4
, de modo que no se exceda el tiempo de ejecución máximo y el tamaño de salida del compilador en línea.Cómo funciona
Esto usa iteración en lugar de recursión. (De hecho, MATL no tiene recursividad).
Primero se genera una matriz de números desde
1
hasta9e5
(esto es suficiente, porque9e5
excede7^7
). A continuación, los números que son múltiplos de7
o que tengan7
como se identifican dígitos, y reemplazado por1
,2
, ... El proceso se itera hasta que no hay números que necesitan ser reemplazados.fuente
Tcl , 121 bytes
La solución trivial con bucle infinito, nada de lujos.
Sin golf:
fuente
incr
. Y si la versión tcl> = 8.6,incr
supone la primera iteración un incremento de una nueva variable de0
a1
si esa variable no se estableció antes; para que puedas deshacerte de las dos primerasset
instrucciones.PHP,
10680 bytesGracias Ismael Miguel por la ayuda con la solución ternaria y el código de bucle más corto que se usa por en lugar de por un tiempo
No se pudieron verificar las últimas partes de la secuencia completa debido al tiempo de ejecución máximo de 30 segundos de PhpFiddle. Parece funcionar al menos hasta 1K en función de la salida de muestra proporcionada por el OP.
Golf:
Versión original de golf :
fuente
for($n=1;;$n++)echo$a[]=!(strpos($n,7)>-1||$n%7==0)?"$n ":array_shift($a)." ";
No sé el recuento de bytes, pero estoy seguro de que es mucho más bajo que 106 bytes. Pruébelo y vea si funciona.for($n=1;;$n++)echo$a[]=strpos($n,"7")>-1||$n%7==0?array_shift($a)." ":"$n ";
. No estoy seguro de si se puede reemplazar$n%7==0
con!$n%7
pero vale la pena intentarlo.for(;;)echo$a[]=strpos(++$n,55)<-1&&$n%7?"$n ":$a[++$b-1];
(58 bytes).++$b-1
porque$a[null] === null
Julia, 62 bytes
Nada sofisticado. Utiliza que la secuencia dentro de los huecos es la secuencia misma. Realiza copias de matriz excesivas para guardar algunos bytes.
fuente
Perl 6 ,
74 57 5453 bytesIntentalo
Expandido:
Prueba:
fuente
~7
lugar de'7'
.Ceilán, 202 bytes
Esta no es una función, sino una declaración de objeto que implementa una secuencia infinita (Iterable). El objeto se puede imprimir directamente,
print(u)
genera esto:{ 1, 2, 3, 4, 5, 6, 1, 8, 9, 10, 11, 12, 13, 2, 15, 16, 3, 18, 19, 20, 4, 22, 23, 24, 25, 26, 5, 6, 29, 30, ... }
Para imprimir más, use
printAll(u)
. El siguiente código usa líneas nuevas y también imprime la suma (y los primeros 30 elementos que se muestran arriba):Aquí está la versión no comentada y comentada:
fuente
Rubí, 80 bytes.
l=->x{x%7==0||x.to_s[/7/]};a=(1..100);b=a.reject &l p a.map{|x|!l[x]?x:b.shift}
Primera presentación, estoy seguro de que se puede mejorar :)
fuente
34
(que es8
actualmente) debería ser7
, pero debido a que7
es un número indescriptible, el programa debe comenzar una tercera iteración y, en su lugar, imprimir1
.Dyalog APL , 39 bytes
{(⍵⍴⍨⍴i)@(i←⍸('7'∊¨⍕¨⍵)∨0=7|⍵)⊢⍵}⍣≡⍳7*7
⍳7*7
es 1 2 3 ... 7 7{ }⍣≡
es el operador de punto fijo : aplique una función repetidamente hasta que el resultado se estabiliceA@I⊢B
modificar operador - reemplazar los elementos en los índicesI
deB
laA
0=7|⍵
máscara de bits para donde el argumento es divisible por 7'7'∊¨⍕¨⍵
máscara de bits para donde el formato decimal del argumento contiene un 7∨
o⍸
¿con qué índices es cierta alguna de las máscaras de bits anteriores?i←
asignar ai
⍵⍴⍨⍴i
remodelar el argumento a la cantidad de elementos eni
fuente
C
157155 BytesParece correcto, no me molesté en comprobarlo por completo. Sube a 999999, que aparentemente es lo suficientemente grande.
Versión sin golf:
Versión parcialmente golfizada:
fuente
else
?(r=0)
mayor parte del tiempo. Pero algunos compiladores son exigentes. Soy demasiado vago para verificar las especificaciones en este momento.R, 86 bytes
Utiliza la Verdad de R incorporada
T
(inicializada enTRUE
/1
) para contar los números en la secuencia y el valor FalsyF
(inicializado enFALSE
/0
) para contar los indescriptibles. Aparte de eso, el programa simplemente verifica si cada número es divisible por siete o si contiene el número.fuente
7%in%el(strsplit(c(T,""),""))
por55%in%utf8ToInt(paste(T))
? (no probado)C - 115 bytes
EDITAR: Gracias a @mschauer que señaló que me perdí algunas cosas.
fuente
Javascript, 80 bytes
Dado que solo hay requisitos mínimos pero no requisitos máximos, esta solución continúa produciéndose indefinidamente.
Para verificar que el algoritmo sea correcto, puede ejecutar el mismo código imprimiendo solo los últimos 10 números y la suma:
fuente
Mathematica, 82 bytes
fuente
JavaScript 81 bytes
Original (98 bytes)
Golfed
fuente
p=console.log;for(c=0,i=1;i<=Math.pow(7,7);i++)/7/.test(i)||i%7==0?(6==c?c=1:c++,p(c)):p(i);
?9e5
Math.pow(7,7)
Print/output AT LEAST the first 7^7
34 1 36 **8** 38
. Pero para lo que vale, la versión actual podría ser un poco más golfed:for(c=i=0;++i<9e5;)console.log(!/7/.test(i)&&i%7?i:c++%6+1)
.Befunge, 100 o 156 bytes
Esta primera versión es la más portátil de las dos, limitándose a celdas de memoria de 7 bits, que es lo que obtienes en el intérprete de referencia.
La segunda versión solo funciona con intérpretes que tienen celdas de memoria de 32 bits y, por lo tanto, no es estrictamente Befunge estándar, pero eso nos permite almacenar valores más grandes en la memoria sin tener que dividirlos en celdas.
En ambos casos, el programa se ejecuta indefinidamente, pero la primera versión se desbordará alrededor de la marca de 2 millones, mientras que la segunda versión debería alcanzar el valor máximo int (alrededor de 2 mil millones).
Puede probarlo en línea , pero deberá eliminar el proceso para evitar que se ejecute para siempre.
fuente
Clojure, 130 bytes
Reducción básica, haciendo un seguimiento de los contenidos del vector de resultados y cuántos valores se han omitido. El último
0
toma el primer elemento del reducido[r s]
,rest
deja caer el primer elemento del resultado indexado a 0.fuente
Perl6, 41 bytes
fuente
Tcl , 64 bytes
Pruébalo en línea!
fuente
JavaScript, 64 bytes
fuente
console.log
) respuestas de JavaScript, son 70 bytesJapt , 25 bytes
Prueba la suma y los últimos 10 elementos.
Genera las primeras 1,000,000 entradas de la secuencia y las imprime. Un millón es el número más corto
7**7 == 823543
en Japt.La nueva línea final es significativa, ya que activa la asignación implícita a
U
.Generar la lista solo toma alrededor de un segundo, pero la salida de toda la matriz probablemente hará que su navegador se cuelgue.
Desempaquetado y cómo funciona
Utiliza la propiedad de que la definición recursiva se puede resolver mirando la secuencia ya generada.
fuente