Descripción binaria recursiva
Recientemente, hice mi primera contribución a OEIS extendiendo y agregando un archivo b a la secuencia A049064 . La secuencia comienza con 0
, y luego los siguientes valores se derivan de dar una "descripción binaria" del último elemento.
Por ejemplo, el segundo término sería 10
, porque había uno 0
en el primer elemento. El tercer término sería 1110
, porque había uno 1
y uno 0
. El cuarto sería 11110
. porque hay tres ( 11
en binario) 1
sy uno 0
. A continuación se muestra un desglose del quinto término para aclarar este proceso:
> 11110
> 1111 0 (split into groups of each number)
> 4*1 1*0 (get count of each number in each group)
> 100*1 1*0 (convert counts to binary)
> 100110 (join each group back together)
Y aquí hay un ejemplo para pasar del sexto al séptimo término:
> 1110010110
> 111 00 1 0 11 0
> 3*1 2*0 1*1 1*0 2*1 1*0
> 11*1 10*0 1*1 1*0 10*1 1*0
> 111100111010110
Se puede extraer de un programa de referencia φ hice para calcular los términos.
Tu trabajo
Debe crear un programa o función que tome un número n
mediante argumentos de entrada o función estándar e imprima la secuencia del 1st
término al (n+1)th
término, separados por una nueva línea. Si desea ver los números más bajos, puede consultar el archivo b desde la página OEIS. Sin embargo, su programa / función debe ser compatible 0 <= n <= 30
, es decir, hasta el 31er término. Esto no es poca cosa, ya que A049064(30)
tiene más de 140,000 dígitos de largo δ . Si desea ver cuál debería ser el 31er término, lo puse en Pastebin .
Ejemplo de E / S
func(10)
0
10
1110
11110
100110
1110010110
111100111010110
100110011110111010110
1110010110010011011110111010110
1111001110101100111001011010011011110111010110
1001100111101110101100111100111010110111001011010011011110111010110
func(0)
0
func(3)
0
10
1110
11110
Solo hay una regla: ¡ No hay lagunas estándar!
Este es el código de golf , por lo que gana el conteo de bytes más bajo.
φ - Gist se puede encontrar aquí , y una demostración de ideone está aquí .
δ - En caso de que te lo estés preguntando, mis estimaciones sobre la duración del centésimo término lo sitúan en aproximadamente 3.28x10 250 caracteres, lo que sería bastante para que cualquiera lo calcule.
[0]\n[1, 0]\n[1, 1, 1, 0]\n...
Respuestas:
CJam,
1817 bytes¡Gracias a @ MartinBüttner por jugar golf en un byte!
Pruébelo en línea en el intérprete de CJam .
Cómo funciona
fuente
Pyth,
1817 bytesPruébelo en línea: demostración
Gracias a @isaacg por guardar un byte.
Explicación:
Esto utiliza el hecho de que 0 y 1 en binario también son 0 y 1.
fuente
V
lugar de.u
:J]0VQjk~JsjR2srJ8
Python 2,
125116110 bytesSe guardó 1 byte gracias a @ Sp3000 y 5 bytes al eliminar una
int
llamada redundante .Versión antigua:
¡Ahorré muchos, muchos bytes gracias a @ Vioz-!
Versión original:
fuente
Ruby,
807269 bytesComo una función:
Llámalo por ejemplo con:
f[6]
fuente
->m{l=?0;0.upto(m){puts l;l.gsub!(/1+|0+/){$&.size.to_s(2)+$&[0]}}}
upto
!
Python 2, 102 bytes
De alguna manera, la combinación de
itertools
más largo quere
ygroupby
volvergrouper
significa que los objetos que el uso de expresiones regulares es un poco más corto ...fuente
Cobra - 128
fuente
Haskell,
136130 Bytesfuente