Rozważ następującą listę:
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',
...
]
Oto jeden ze sposobów, aby na to spojrzeć - uczysz się pisać chińskie znaki i chcesz nauczyć się coraz większych ich fragmentów, ćwicząc je podczas podróży. Zaczynasz od A, potem B, a potem jest już sekwencja złożona z dwóch, więc ją połączysz. Następnie idź z C i D, stwórz kolejną parę, ćwicz ją. Następnie ćwiczysz: ABCD. To samo dotyczy E do H, a następnie ćwiczyć: ABCDEFGH. Lista jest nieskończona.
Celem jest wygenerowanie i wydrukowanie n-tego elementu tej listy, indeksów rosnących od zera. Załóżmy, że po „Z” znów dostajesz „A”.
Kryterium wygranej to długość kodu źródłowego.
BC
lubCDEF
? Co decyduje o tym, co łączymy, a co nie? Jak to jest nieskończone, jeśli zaczyna się odA
nowa poZ
(masz na myśli w pewnym momencie po tymABCDEFGHIJKLMNOPQRSTUVWXZ
,ABCDEFGHIJKLMNOPQRSTUVWXZAB
czy coś?)x,y,z,a,b...
).Odpowiedzi:
Python 2, 53 bajty
Wypróbuj online!
Podobnie do tej konstrukcji z transformacją
x = u-v
,y = u
źródło
x^=y-x
-1 bajtów.JavaScript (ES6), 59 bajtów
Możemy zaoszczędzić 2 bajty, tworząc sekwencję 1 indeksowaną i stosując uproszczenie podobne do tego używanego przez KSab :
Wypróbuj online!
JavaScript (ES6), 61 bajtów
Zwraca listę nie zawijających liczb całkowitych.
Wypróbuj online!
Na podstawie konstrukcji Donalda Knutha. Powiązany wpis OEIS: A182105 .
W jaki sposób?
Jest to dwustopniowa funkcja rekurencyjna.
JavaScript (ES6), 97 bajtów
Zwraca zawijanie wielkich liter.
Wypróbuj online!
Lub 91 bajtów małymi literami.
źródło
Python 2 , 60 bajtów
Wypróbuj online!
Na podstawie wykorzystania konstrukcji Knutha przez Arnaulda . Warunek
u&-u==v
można zastąpić prostszym warunkiemu/v%2>0
lub alternatywnieu&v>0
, ponieważv
zawsze jest to potęga 2, którąu
można podzielić.źródło
Wolfram Language (Mathematica) ,
8071 bajtówWypróbuj online!
Zwraca listę liczb całkowitych zamiast zawijanego ciągu alfabetu. 0-indeksowane.
Wykorzystuje OEIS A182105 , dzięki @Arnauld.
Drukowanie listy w nieskończoność, 54 bajty
Wypróbuj online!
1-indeksowany. Wersja TIO ma
lim
zamiast∞
zapobiegać awariom.źródło
Python 2 ,
938982 bajtówWypróbuj online!
Zwraca listę liczb całkowitych. Podobne do podejścia Javascript w Arnauld's .
źródło
Galaretka , 16 bajtów
Pełny program Wyświetla
,
oddzielną listę liczb całkowitych.źródło
Węgiel drzewny ,
454235 bajtówWypróbuj online! Link jest do pełnej wersji kodu. 1-indeksowany. Nie mogłem znaleźć prostej formuły do wygenerowania wyniku, więc po prostu zastosowałem się do procedury podanej w pytaniu. Wyjaśnienie:
Powtórz podaną liczbę
n
razy.Wciśnij następny element do predefiniowanej pustej tablicy
u
, obliczonej jako ...... jeśli jest więcej niż jeden element,
u
a ostatnie dwa elementy mają tę samą długość ...... następnie dodaj przedostatni element do ostatniego elementu (który tworzy wynik w odwrotnej kolejności) ...
... w przeciwnym razie można znaleźć następną literę, licząc, ile liter dodaliśmy do tej pory i cyklicznie indeksując do predefiniowanego dużego alfabetu. (Przyjmowanie sumy długości lub długości sumy kończy się niepowodzeniem, gdy lista jest pusta, a mapowanie listy na ciąg oszczędza dwa bajty na specjalnym umieszczeniu pustej listy.)
Weź ostatni element
u
, który jest odwróconyn
th żądanej listy, i niejawnie wydrukuj odwrotną stronę.źródło