Considere la siguiente lista:
expected = [
'A',
'B',
'AB',
'C',
'D',
'CD',
'ABCD',
'E',
'F',
'EF',
'G',
'H',
'GH',
'EFGH',
'ABCDEFGH',
'I',
'J',
'IJ',
'K',
'L',
'KL',
'IJKL',
'M',
'N',
'MN',
'O',
'P',
'OP',
'MNOP',
'IJKLMNOP',
'ABCDEFGHIJKLMNOP',
...
]
Aquí hay una forma de verlo: estás aprendiendo a escribir caracteres chinos y quieres aprender cada vez más pedazos de ellos, ensayándolos a medida que avanzas. Comienzas con A, luego vas con B, luego ya hay una secuencia que es un par de dos, así que la combinas. Luego vas con C y D, haces otro par, practicas. Entonces ensayas: ABCD. Entonces lo mismo ocurre con E hasta H, luego ensaye: ABCDEFGH. La lista es infinita.
El objetivo es generar e imprimir un elemento n-ésimo de esta lista, los índices van desde cero. Suponga que después de 'Z', obtiene 'A' nuevamente.
El criterio ganador es la longitud del código fuente.
BC
oCDEF
? ¿Qué decide qué concatenamos y qué no? ¿Cómo es infinito si comienza deA
nuevo despuésZ
(quieres decir en algún momento después deABCDEFGHIJKLMNOPQRSTUVWXZ
que tenemosABCDEFGHIJKLMNOPQRSTUVWXZAB
o algo así?)x,y,z,a,b...
).Respuestas:
Python 2, 53 bytes
Pruébalo en línea!
Similar a esta construcción con la transformación
x = u-v
,y = u
fuente
x^=y-x
de -1 byte.JavaScript (ES6), 59 bytes
Podemos ahorrar 2 bytes haciendo que la secuencia esté indexada en 1 y usando una simplificación similar a la utilizada por KSab :
Pruébalo en línea!
JavaScript (ES6), 61 bytes
Devuelve una lista de enteros no envolventes.
Pruébalo en línea!
Basado en una construcción de Donald Knuth. Entrada OEIS relacionada: A182105 .
¿Cómo?
Esta es una función recursiva de dos etapas.
JavaScript (ES6), 97 bytes
Devuelve envolviendo letras mayúsculas.
Pruébalo en línea!
O 91 bytes en minúsculas.
fuente
Python 2 , 60 bytes
Pruébalo en línea!
Basado en el uso de Arnauld de la construcción de Knuth . La condición
u&-u==v
se puede reemplazar con una condición más simpleu/v%2>0
, o alternativamenteu&v>0
, yav
que siempre es una potencia de 2 queu
es divisible por.fuente
Wolfram Language (Mathematica) ,
8071 bytesPruébalo en línea!
Devuelve una lista de enteros en lugar de una cadena de alfabeto envolvente. 0 indexado.
Utiliza OEIS A182105 , gracias a @Arnauld.
Imprimir la lista indefinidamente, 54 bytes
Pruébalo en línea!
1 indexado. La versión TIO tiene en
lim
lugar de∞
evitar bloqueos.fuente
Python 2 ,
938982 bytesPruébalo en línea!
Devuelve una lista de enteros. Similar al enfoque Javascript de Arnauld .
fuente
Jalea , 16 bytes
Programa completo Imprime
,
una lista separada de enteros.fuente
Carbón ,
454235 bytesPruébalo en línea! El enlace es a la versión detallada del código. 1 indexado. No pude encontrar una fórmula simple para generar el resultado, así que simplemente seguí el procedimiento dado en la pregunta. Explicación:
Repita el número dado
n
veces.Empuje el siguiente elemento a la matriz vacía predefinida
u
, calculada como ...... si hay más de un elemento
u
y los dos últimos elementos tienen la misma longitud ...... luego agregue el penúltimo elemento al último elemento (que acumula el resultado en orden inverso) ...
... de lo contrario, la siguiente letra se puede encontrar contando cuántas letras hemos agregado hasta ahora e indexando cíclicamente en el alfabeto en mayúsculas predefinido. (Tomar la suma de la longitud o la longitud de la suma falla cuando la lista está vacía, y mapear la lista en una cadena ahorra dos bytes en una lista vacía en mayúsculas especiales).
Tome el último elemento de
u
, que es eln
elemento reverso de la lista deseada, e imprima implícitamente el reverso.fuente