Betrachten Sie die folgende Liste:
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',
...
]
Hier ist eine Möglichkeit, es zu betrachten: Sie lernen, wie man chinesische Schriftzeichen schreibt, und Sie möchten immer größere Teile davon lernen und sie währenddessen üben. Sie beginnen mit A, gehen dann mit B, dann gibt es bereits eine Sequenz, die ein Paar von zwei ist, so dass Sie es kombinieren. Dann gehst du mit C und D, machst ein weiteres Paar und übst es. Dann proben Sie: ABCD. Dann geht das selbe mit E bis H, dann probt: ABCDEFGH. Die Liste ist unendlich.
Ziel ist es, ein n-tes Element dieser Liste zu generieren und auszudrucken, wobei die Indizes von Null aufwärts gehen. Angenommen, Sie erhalten nach 'Z' erneut 'A'.
Das Gewinnkriterium ist die Länge des Quellcodes.
BC
oderCDEF
? Was entscheidet, was wir verketten und was nicht? Wie ist es unendlich , wenn es beginntA
wieder nachZ
(man an einem gewissen Punkt bedeutet , nachdemABCDEFGHIJKLMNOPQRSTUVWXZ
wir haben ,ABCDEFGHIJKLMNOPQRSTUVWXZAB
oder was?)x,y,z,a,b...
).Antworten:
Python 2, 53 Bytes
Probieren Sie es online!
Ähnlich wie bei dieser Konstruktion mit der Transformation
x = u-v
,y = u
quelle
x^=y-x
für -1 Byte stehen.JavaScript (ES6), 59 Byte
Wir können 2 Bytes einsparen, indem wir die Sequenz 1-indizieren und eine Vereinfachung verwenden, die der von KSab verwendeten ähnelt :
Probieren Sie es online!
JavaScript (ES6), 61 Byte
Gibt eine Liste nicht umschließender Ganzzahlen zurück.
Probieren Sie es online!
Basierend auf einer Konstruktion von Donald Knuth. Zugehöriger OEIS-Eintrag: A182105 .
Wie?
Dies ist eine zweistufige rekursive Funktion.
JavaScript (ES6), 97 Byte
Gibt Großbuchstaben zurück.
Probieren Sie es online!
Oder 91 Bytes in Kleinbuchstaben.
quelle
Python 2 , 60 Bytes
Probieren Sie es online!
Basierend auf Arnauld's Verwendung von Knuths Konstruktion . Die Bedingung
u&-u==v
kann durch eine einfachere Bedingung ersetztu/v%2>0
werden oder alternativu&v>0
, dav
immer eine Potenz von 2u
ist, die durch teilbar ist.quelle
Wolfram Language (Mathematica) ,
8071 BytesProbieren Sie es online!
Gibt eine Liste von Ganzzahlen anstelle einer umschließenden Alphabetzeichenfolge zurück. 0-indiziert.
Verwendet OEIS A182105 , danke an @Arnauld.
Drucken Sie die Liste unbegrenzt, 54 Bytes
Probieren Sie es online!
1-indiziert. Die TIO-Version hat
lim
statt∞
Abstürze zu verhindern.quelle
Python 2 ,
938982 BytesProbieren Sie es online!
Gibt eine Liste von Ganzzahlen zurück. Ähnlich wie bei Arnauld's Javascript-Ansatz .
quelle
Gelee , 16 Bytes
Volles Programm. Druck
,
-separated Liste von ganzen Zahlen.quelle
Holzkohle ,
454235 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. 1-indiziert. Ich konnte keine einfache Formel finden, um das Ergebnis zu generieren, also habe ich einfach das in der Frage angegebene Verfahren befolgt. Erläuterung:
Wiederholen Sie die angegebene Anzahl
n
Male.Schieben Sie das nächste Element in das vordefinierte leere Array
u
, berechnet als ...... wenn mehr als ein Element enthalten ist
u
und die letzten beiden Elemente die gleiche Länge haben ...... dann füge das vorletzte Element an das letzte Element an (was das Ergebnis in umgekehrter Reihenfolge aufbaut) ...
... andernfalls kann der nächste Buchstabe gefunden werden, indem die Anzahl der bisher hinzugefügten Buchstaben gezählt und zyklisch in das vordefinierte Großbuchstaben indiziert wird. (Wenn die Liste leer ist und die Liste in eine Zeichenfolge abgebildet wird, werden durch die Angabe der Summe der Länge oder der Länge der Summe zwei Bytes gespart, während eine leere Liste in Sonderzeichen eingeschlossen wird.)
Nehmen Sie das letzte Element von
u
, das das umgekehrten
Element der gewünschten Liste ist, und drucken Sie implizit das umgekehrte Element aus.quelle