La secuencia diagonal cuadrada binaria se construye de la siguiente manera:
- Tome la secuencia de números naturales positivos:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ...
Convierta cada número a binario:
1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111, 10000, 10001, ...
Concatenarlos:
11011100101110111100010011010101111001101111011111000010001 ...
Comenzando con
n=1, genere cuadrados con una longitud lateral crecientenque se llenen de izquierda a derecha, de arriba a abajo con los elementos de la secuencia anterior:1
1 0 1 1
1 0 0 1 0 1 1 1 0
1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1
0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 0 0 0 0 1
...
Tome la diagonal (superior izquierda a inferior derecha) de cada cuadrado:
1, 11, 100, 1011, 00111, ...
Convierte a decimal (ignorando los ceros iniciales):
1, 3, 4, 11, 7, ...
Tarea
Escriba un programa o función que genere la secuencia de una de las siguientes maneras:
- Devuelve o imprime la secuencia infinitamente.
- Dada la entrada
i, devuelve o imprime los primerosielementos de la secuencia. - Dada la entrada
i, devuelve o imprime elielemento th de la secuencia (0 o 1 indexado).
Indique en su respuesta qué formato de salida elige.
Este es el código de golf , gana la respuesta más corta en cada idioma.
Casos de prueba
Aquí están los primeros 50 elementos de la secuencia:
1,3,4,11,7,29,56,141,343,853,321,3558,8176,3401,21845,17129,55518,134717,151988,998642,1478099,391518,7798320,8530050,21809025,61485963,66846232,54326455,221064493,256373253,547755170,4294967295,1875876391,2618012644,24710258456,6922045286,132952028155,217801183183,476428761596,51990767390,687373028085,1216614609441,7677215985062,15384530216172,22714614479340,15976997237789,0,256145539974868,532024704777005,601357273478135

3mconn?°pero mucho más rápido: PCasco , 15 bytes
Esto toma un enfoque algo diferente a la respuesta de Martin
Pruébalo en línea!
Explicación:
En acción
ṁḋN:[1,1,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,0,1...]ṘNN:[1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8...]C:[[1],[1,0],[1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1,1],[0,0,0,1]...]CN:[[[1]],[[1,0],[1,1]],[[1,0,0],[1,0,1],[1,1,0]]...]m z!N:[[1],[1,1],[1,0,0],[1,0,1,1],[0,0,1,1,1],[0,1,1,1,0,1]...]oḋ:[1,3,4,11,7,29,56,141,343,853,321,3558,8176,3401,21845...]fuente
Java (OpenJDK 8) ,
215212206202197 bytesPruébalo en línea!
fuente
i->{String b="",t;int s=0,x=++i,j;for(;--x>0;s+=x*x);while(b.length()<s)b+=i.toString(++x,2);for(j=1,s=0;j<i;System.out.println(i.valueOf(t,2)),s+=j*j++)for(t="",x=s;x<s+j*j;x+=j+1)t+=b.charAt(x);}( 197 bytes )Python 2 , 91 bytes
Pruébalo en línea!
imprime la secuencia infinitamente
fuente
Jalea , 16 bytes
Pruébalo en línea!
Explicación
fuente
Mathematica, 96 bytes
Emite el
ielemento th de la secuencia (1 indexado)Pruébalo en línea!
fuente
Perl 5 , 92 + 1 (
-p) = 93 bytesPruébalo en línea!
fuente
Jalea , 18 bytes
Enfoque completamente diferente en comparación con la solución de Erik .
Pruébalo en línea!
Cómo funciona
Ḷ²S'ɓ * 3B € Fṫ - Enlace auxiliar (monádico). Ḷ - Rango reducido, genera [0, N). ² - Cuadrado vectorizado (cuadrado cada uno). S - Suma. '- Incremento, para tener en cuenta la indexación 1 de Jelly. ɓ - Inicia una cadena diádica separada. * 3 - La entrada a la potencia de 3. B € - Convierte cada uno a binario. F - Acoplar. ṫ - Cola. Devuelve x [y - 1:] (1 indexado). Çm'ḣµḄ - Enlace principal (monádico). Ç - Último enlace como mónada. m '- Entrada modular + 1. Obtenga cada elemento "entrada + 1" de la lista. ḣ - Cabeza. Devuelva lo anterior con elementos en un índice más alto que la entrada recortada. µḄ - Convertir de binario a entero.¡Salvado 1 byte gracias a Jonathan Allan !
fuente
³:Ḷ²S‘ɓ*3B€FṫJalea , 22 bytes
Pruébalo en línea!
fuente
Pyth ,
2720 bytesVerifique los primeros casos de prueba.
Obtiene el I ésimo término de la sucesión, 1 indexado.
¿Cómo funciona?
fuente