Considérez la liste suivante:
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',
...
]
Voici une façon de voir les choses: vous apprenez à écrire des caractères chinois et souhaitez en apprendre de plus en plus de gros morceaux, en les répétant au fur et à mesure. Vous commencez avec A, puis allez avec B, puis il y a déjà une séquence qui est une paire de deux, donc vous la combinez. Ensuite, vous allez avec C et D, faites une autre paire, entraînez-vous. Ensuite, vous répétez: ABCD. Ensuite, la même chose va de E à H, puis répétez: ABCDEFGH. La liste est infinie.
Le but est de générer et d'imprimer un n-ième élément de cette liste, les index remontant à zéro. Supposons qu'après «Z», vous obtenez à nouveau «A».
Le critère gagnant est la longueur du code source.
BC
ouCDEF
? Qu'est-ce qui décide de ce que nous concaténons et de ce que nous ne faisons pas? Comment est-il infini si celaA
recommence aprèsZ
(vous voulez dire à un moment donné après queABCDEFGHIJKLMNOPQRSTUVWXZ
nous ayonsABCDEFGHIJKLMNOPQRSTUVWXZAB
quelque chose?)x,y,z,a,b...
).Réponses:
Python 2, 53 octets
Essayez-le en ligne!
Semblable à cette construction avec la transformation
x = u-v
,y = u
la source
x^=y-x
pour -1 octet.JavaScript (ES6), 59 octets
Nous pouvons économiser 2 octets en rendant la séquence indexée 1 et en utilisant une simplification similaire à celle utilisée par KSab :
Essayez-le en ligne!
JavaScript (ES6), 61 octets
Renvoie une liste d'entiers non enveloppants.
Essayez-le en ligne!
Basé sur une construction de Donald Knuth. Entrée OEIS associée: A182105 .
Comment?
Il s'agit d'une fonction récursive en deux étapes.
Nous construisons d'abord la séquence définie comme et:(un,vn) (u1,v1)=(1,1)
Lors de la deuxième passe, nous construisons la liste et éventuellement la .[un−vn,un−vn+1,…,un]
JavaScript (ES6), 97 octets
Renvoie des lettres majuscules d'habillage.
Essayez-le en ligne!
Ou 91 octets en minuscules.
la source
Python 2 , 60 octets
Essayez-le en ligne!
Basé sur l'utilisation par Arnauld de la construction de Knuth . La condition
u&-u==v
peut être remplacée par une condition plus simpleu/v%2>0
, ou alternativementu&v>0
, carv
est toujours une puissance de 2 quiu
est divisible par.la source
Wolfram Language (Mathematica) ,
8071 octetsEssayez-le en ligne!
Renvoie une liste d'entiers au lieu d'une chaîne d'alphabet enveloppante. 0 indexé.
Utilise OEIS A182105 , grâce à @Arnauld.
Impression indéfinie de la liste, 54 octets
Essayez-le en ligne!
1 indexé. La version TIO a
lim
au lieu de∞
prévenir les plantages.la source
Python 2 ,
938982 octetsEssayez-le en ligne!
Renvoie une liste d'entiers. Similaire à l'approche Javascript d' Arnauld .
la source
Gelée , 16 octets
Programme complet. Imprime
,
une liste d'entiers séparée.la source
Fusain ,
454235 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. 1 indexé. Je n'ai pas trouvé de formule simple pour générer le résultat, j'ai donc simplement suivi la procédure indiquée dans la question. Explication:
Répétez le nombre donné de
n
fois.Poussez l'élément suivant dans le tableau vide prédéfini
u
, calculé comme ...... s'il y a plus d'un élément
u
et que les deux derniers éléments ont la même longueur ...... puis ajoutez l'avant-dernier élément au dernier élément (qui construit le résultat dans l'ordre inverse) ...
... sinon la lettre suivante peut être trouvée en comptant le nombre de lettres que nous avons ajoutées jusqu'à présent et en les indexant cycliquement dans l'alphabet majuscule prédéfini. (La prise de la somme de la longueur ou de la longueur de la somme échoue lorsque la liste est vide et le mappage de la liste dans une chaîne économise deux octets par rapport à la casse spéciale d'une liste vide.)
Prenez le dernier élément de
u
, qui est len
ème élément inversé de la liste souhaitée, et imprimez implicitement l'inverse.la source