Jest to odpowiedź na stare wyzwanie , mające na celu dostosowanie wymagań We / Wy do naszych najnowszych standardów. Odbywa się to w celu umożliwienia większej liczbie języków wzięcia udziału w wyzwaniu dotyczącym tej popularnej sekwencji. Zobacz ten meta post w celu omówienia repost.
Sekwencja Kolakoski to zabawna sekwencja autoreferencyjna, która ma zaszczyt być sekwencją OEIS A000002 (i jest znacznie łatwiejsza do zrozumienia i implementacji niż A000001). Sekwencja zaczyna się od 1 , składa się tylko z 1 si 2 s, a element sekwencji a (n) opisuje długość n- tego przebiegu 1 s lub 2 s w sekwencji. To jednoznacznie określa kolejność (z wizualizacją przebiegów poniżej):
1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1,2,1,1,2,1,2,2,1,1,2,1,1,2,...
= === === = = === = === === = === === = = === = = === === = === =
1, 2, 2, 1,1, 2, 1, 2, 2, 1, 2, 2, 1,1, 2, 1,1, 2, 2, 1, 2, 1,...
Twoim zadaniem jest oczywiście wdrożenie tej sekwencji. Możesz wybrać jeden z trzech formatów:
- Weź wejście n i wyślij n- ty ciąg sekwencji, gdzie n zaczyna się od 0 lub 1 .
- Wziąć wejście n oraz wyjście terminy włącznie z n -tego okresu sekwencji, gdzie n rozpoczyna albo z 0 lub 1 (tj albo drukowania pierwszej n i pierwszy n + 1 zasady).
- Wartości wyjściowe z sekwencji w nieskończoność.
W drugim i trzecim przypadku możesz wybrać dowolny rozsądny, jednoznaczny format listy. W porządku, jeśli nie ma separatora między elementami, ponieważ z definicji są one zawsze pojedynczymi cyframi.
W trzecim przypadku, jeśli przesłanie jest funkcją, możesz również zwrócić nieskończoną listę lub generator w językach, które je obsługują.
Możesz napisać program lub funkcję i użyć dowolnej z naszych standardowych metod otrzymywania danych wejściowych i dostarczania danych wyjściowych. Pamiętaj, że te luki są domyślnie zabronione.
To jest golf golfowy , więc wygrywa najkrótsza ważna odpowiedź - mierzona w bajtach .
Odpowiedzi:
Galaretka , 7 bajtów
Jest to pełny program, który drukuje pierwsze n warunków.
Wypróbuj online!
Jak to działa
Przykładowy przebieg
Niech n = 5 .
Pierwsze wywołanie łańcucha powtarza cyklicznie 1, 2, aby osiągnąć długość 5 , następnie każdy element 5 razy, a na koniec skraca wynik do długości 5 .
Daje to listę o długości 5 . Pierwszy element jest pierwszym elementem sekwencji Kolakoski.
Drugie wywołanie łańcucha powtarza cyklicznie 1, 2, aby osiągnąć długość 5 , następnie powtarza k- ty element j razy, gdzie j jest k- tym elementem z poprzedniej listy, i na koniec skraca wynik do długości 5 .
Daje to kolejną listę o długości 5 . Pierwsze dwa elementy są pierwszymi dwoma elementami sekwencji Kolakoski.
Proces ten trwa trzy kolejne iteracje.
To jest pierwsze pięć elementów sekwencji Kolakoskiego.
źródło
Python 2 , 51 bajtów
Drukuje w nieskończoność. Tworzy listę
l
w trakcie iteracji. Dla każdego wpisux
wl
, dodajex
kopii1
lub2
, w zależności od bieżącego naprzeciwko ostatniego elementu.Główną trudnością jest poradzenie sobie z początkowym fragmentem autoreferencyjnym
[1,2,2]
. Ten kod po prostu drukuje inicjał1,2
i kontynuuje stamtąd. Dodatkowy druk kosztuje 12 bajtów. Bez tego:39 bajtów , brakuje dwóch pierwszych wpisów:
Innym podejściem jest specjalna inicjalizacja pierwszych dwóch wpisów. My zainicjować
l
jak[0,0,2]
tak, że pierwsze dwie pozycje nie powodują dołączenie, aleprint x or n
sprawia im być drukowane jakon
.51 bajtów
Inną poprawką jest inicjalizacja
l=[1]
, ręczne śledzenie zmianyn
i poprawienie drukowania:51 bajtów
Bez tego
(l==[1,1])+
wszystko działa oprócz wydrukowanych sekwencji1,1,2
zamiast1,2,2
. Musi być lepszy sposób na rozpoznanie, że jesteśmy na tym drugim etapie.I kolejna dziwna poprawka, a także ta sama liczba bajtów:
51 bajtów
źródło
Wumpus ,
1311 bajtówWypróbuj online!
Drukuje sekwencję w nieskończoność bez separatorów.
Jestem naprawdę zaskoczony, jak krótki jest to czas.
Wyjaśnienie
Podstawowym pomysłem jest utrzymanie sekwencji na stosie i wielokrotne używanie najniższego elementu w celu wygenerowania kolejnego przebiegu, a następnie wydrukowania go. Skutecznie nadużywamy stosu jako kolejki. Możemy także zaoszczędzić kilka bajtów, pracując
0
i1
(zwiększając tylko dane wyjściowe) zamiast1
i2
, ponieważ w ten sposób nie musimy jawnie inicjować stosu za pomocą1
i możemy użyć logicznej negacji do przełączania się między dwiema wartościami.źródło
Brachylog ,
30 26 25 23 17 1614 bajtówZwraca pierwsze n wartości. Wykorzystuje „zmienną wyjściową”
.
dla danych wejściowych i przekazuje dane do „zmiennej wejściowej”?
. Wypróbuj online!Wyjaśnienie
Bardzo się cieszę z tego, jak to się deklaruje: program jest w zasadzie opisem wysokiego poziomu listy wyników i jej relacji do danych wejściowych.
Ponieważ
{1|2}ᵐ
listy testowane są w kolejności leksykograficznej, dane wyjściowe zaczynają się od 1.źródło
Łuska , 10 bajtów
Zwraca pierwsze n wartości. Wypróbuj online!
Wyjaśnienie
W przypadku danych wejściowych 20 proces wygląda następująco:
źródło
Java 10,
15510810510097 bajtówDrukuje w nieskończoność bez ogranicznika.
-3 bajty po pośredniej wskazówce od @Neil .
-5 bajtów dzięki @MartinEnder .
-3 bajty konwertują Java 8 na Java 10.
Wyjaśnienie:
Wypróbuj online (limit czasu po 60 sekundach w TIO).
źródło
[1,2,2]
i przejdź stamtąd) i napisałem 155 bajtową odpowiedź (która jest teraz golfa za pomocą ciągu znaków zamiast listy).(3-i)
zamiast(1+i%2)
?i
nie ma 1 lub 2, to indeks ciągu.Galaretka , 10 bajtów
Zwraca n- ty termin.
Wypróbuj online!
Jak to działa
źródło
Haskell , 33 bajty
Wypróbuj online!
Ørjan Johansen zapisał 7 bajtów przy użyciu niepodważalnego wzorca, aby wymusić prefiks.
źródło
n:
na początku wyrażenia, nie musisz wiedzieć, żex
jest tam pierwszyn
. Ale musisz być leniwy, aby uniknąć sprawdzania go przez funkcję przed przejściem don:
.Gol> <> ,
87 bajtówWypróbuj online!
Wyjaśnienie
To jest port mojej odpowiedzi Wumpusa . Gol> <> jest w zasadzie język, który posiada wszystkie niezbędne funkcje do portu odpowiedź wumpusa (konkretnie ukryte zer na dnie stosu, „duplikat” wdrożone „pop, Push, Push” i komendy obrotu stosu), ale :
00.
skoku, aby wrócić do początku.K
„pop N, a następnie duplikuje następny element N razy”, który można zastąpić?=
, oszczędzając kolejny bajt.Mapowanie z Wumpus na Gol> <> staje się:
źródło
Język programowania Szekspira ,
594 583572 bajtówDzięki Ed Wynn za -10 bajtów!
Wypróbuj online!
To jest golfowa wersja nie golfowego rozwiązania Eda Wynna , zaczynając od 828 bajtowego rozwiązania, które umieścił w komentarzach, i stamtąd trochę wariuje .
Wyjaśnienie:
źródło
> <> ,
1312 bajtówWypróbuj online!
Port odpowiedzi Wumpusa Martina Endera . Niestety,
><>
nie ma polecenia inkrementacji ani inwertowania, ani nie ma niejawnych zer na dole stosu, więc kończy się to nieco dłużej.źródło
JavaScript,
67666058525150 bajtówTo sprawiło, że mój mózg swędził bardziej niż powinien! Powoduje powtórzenie
n
th, indeksowane 0.5 + 1 bajtów zaoszczędzonych dzięki tsh drapiącemu mój swędzący mózg!
Sprawdź to
Poniższy fragment kodu wyświetli pierwsze 50 haseł.
Pokaż fragment kodu
Wyjaśnienie
Jest to jedna z tych rzadkich sytuacji, w których możemy zadeklarować niektóre zmienne poza zakresem naszej funkcji, zmodyfikować je w obrębie funkcji i nadal być w stanie wykorzystać je przy kolejnych wywołaniach funkcji.
źródło
n=>(g=s=>s[n]||g(s+(++x%2+1)*(10*s[x]-9)))('122',x=1)
s='122',x=1,g=n=>s[n]||g(n,s+=(++x%2+1)*(10*s[x]-9))
uważane za prawidłowe zgłoszenie?s[n]||
był oczywistym przypadkiem, że nie widziałem drewna dla drzew! Twoja druga sugestia nie byłaby jednak ważna, ponieważ funkcję można było wywołać tylko raz;s
ix
muszą być inicjowane przy każdym połączeniu.s
ix
nie dotknął między innymi kodami każdy powołuje (która jest domyślnie).s[x]+0-9
to całkiemPython (2 i 3),
6560 bajtówZwraca n- ty wpis, indeksowany 0.
Alternatywa (65 bajtów):
źródło
[1,2,2]
jako wartości początkowej wsum
Haskell , 48 bajtów
-1 bajt dzięki nim. -2 bajty dzięki Lynn.
Wypróbuj online!
Powtórz każdy element mod pozycji 2 + 1 razy.
źródło
c=1:2:c
pieprzenie mózgu , 61 bajtów
Wypróbuj online!
Drukuje liczby jako kody znaków w nieskończoność. Dla jasności, oto wersja, która drukuje w liczbach (z wyjątkiem pierwszych dwóch elementów, które są łatwe do zweryfikowania).
Jak to działa:
źródło
05AB1E ,
129 bajtówZaoszczędzono 3 bajty dzięki Grimy
Drukuje pierwsze n elementów.
Wypróbuj online!
Wyjaśnienie
źródło
2L[2LÞsÅΓ
.∞[2LÞsÅΓ
.Δ2LÞsÅΓI∍
dla wersji, która drukuje pierwsze n elementów, którym podano dane wejściowe n.05AB1E , 15 bajtów
Wypróbuj online! lub z limitem iteracji
Wyjaśnienie
źródło
¸«
,=
by wydrukować je na 2 bajtów zapisanych.ƵLS[NÌ©èF®É>=
, nie musisz oszukiwać, jeśli nie konsumujesz.Python 3 ,
5554 bajtówWypróbuj online!
źródło
J , 12 bajtów
Funkcja pojedynczego argumentu przyjmuje n i tworzy pierwsze n wyrażeń. Wypróbuj online!
Po prostu wyciągam moją starą odpowiedź na stare pytanie.
I.
jest czasownikiem, który pobiera tablicę liczb i wyrzuca listę indeksów, więc jeśli k -ty element w tablicy to n , to indeks k pojawia się n razy. Użyjemy go do uruchomienia sekwencji Kołakowskiego od początkowego ziarna. Każdy krok będzie przebiegał w następujący sposób:Jeśli wykonujemy tę operację
1+2|I.
w kółko, zaczynając od 10, wygląda to tak:Zauważ, że za każdym razem otrzymujemy coraz więcej poprawnych warunków, a po pewnym czasie pierwsze n warunków zostaje naprawionych. Ilość iteracji potrzebnych do ustalenia jest trudna do dokładnego opisania, ale wygląda na z grubsza logarytmiczną w n , więc jeśli uruchomimy ją n razy (
^:]
), powinno być dobrze. (Sprawdź te inne sekwencje OEIS, aby uzyskać więcej informacji: długości generacji , sumy częściowe ).Kiedy to skończymy, wystarczy, że użyjemy pierwszych n terminów
$
. Konstrukcja$v
dowolnego czasownikav
jest przykładem haka i podanie gon
jako argumentu zostanie wykonanen $ (v n)
.Oto stara wersja 13-bajtowy, który jest znacznie mniej marnotrawstwem czasu i przestrzeni:
($1+2|I.)^:_~
. Obcina dane wejściowe na każdym kroku, dzięki czemu możemy uruchomić dokładnie tyle razy, ile potrzeba, aby ustawić, zamiast liniowo wiele razy.źródło
I.
. Zawsze chciałem zobaczyć funkcję kopiowania używaną w golfie.Fueue , 30 bajtów
Fueue to esolang oparty na kolejce, w którym uruchomiony program i jego dane znajdują się w tej samej kolejce, wykonywanie odbywa się cyklicznie w kolejce, a programowanie wymaga dużej synchronizacji, aby zapobiec wykonywaniu czegokolwiek w niewłaściwym czasie.
Wypróbuj online!
Powyżej drukuje niekończącą się listę cyfr jako kodów kontrolnych. Dla 34 bajtów może drukować rzeczywiste cyfry:
Wypróbuj online!
W pozostałej części objaśnienia wykorzystano tę ostatnią wersję.
Podsumowanie elementów Fueue
Kolejka Fueue może zawierać następujące elementy:
)
funkcja je odblokuje , i~
(zamiana dwóch następujących elementów),:
(duplikowanie następnego elementu) i)
(odblokowanie następnego bloku).Omówienie wysokiego poziomu
Podczas głównej pętli programu kolejka składa się z:
[49]
i[50:]
.Niski poziom śledzenia pierwszych 10 poleceń
Omówienie pełnej iteracji głównej pętli
Opcjonalne białe znaki zostały wstawione do oddzielnych poleceń.
Cykl 1:
49
drukuje1
.)
jest nieaktywny i czeka na połączenie z blokiem głównej pętli.50
odbitki2
.:
duplikuje blok głównej pętli (który potrzebuje kopii do samodzielnej replikacji).Cykl 2:
)
odblokowuje pierwszy blok głównej pętli, dzięki czemu zaczyna wykonywać następny cykl.Cykl 3:
[50:]
reprezentuje pierwszą cyfrę wyprodukowaną w łańcuchu,2
jeszcze nie odblokowaną. Następujące czynności)
ostatecznie to zrobią po przejściu przez resztę głównej pętli.~)~:~
to gra w golfa (za pomocą zamiany i kopii) opóźnienie o jeden cykl wynoszące~)~~
.[[49]:~))~:~~]
jest nieaktywny.~
zamienia następujący blok głównej pętli obok[50:]
bloku cyfr.Cykl 4:
)
nadal czeka,~)~
produkuje~)
,~
zamienia[[49]:~))~:~~]
obok[50:]
bloku cyfr.Cykl 5:
~
zamienia)
obok[50:]
bloku cyfr.Cykl 6: Pierwszy
)
blokuje teraz[50:]
blok cyfrowy, następny)
blokuje podprogram[[49]:~))~:~~]
.Cykl 7:
50
drukuje2
,:
duplikuje właśnie wytworzony[49]
blok cyfrowy, tworząc ciąg dwóch1
sekund.:~))~:~
jest opóźnieniem o jeden cykl wynoszącym~~))~:
.~
zamienia pozostały blok głównej pętli za pierwszym[49]
.Cykl 8:
~~))
jest opóźnieniem o jeden cykl wynoszącym)~)
.~
zamienia się:
obok aktualnie trawersowanego[49]
.Cykl 9:
~
zamienia się w)
przeszłości[49]
.:
powiela blok głównej pętli.Cykl 10: Pierwsze
)
odblokowuje[49]
blok cyfrowy, który właśnie przeszedł, drugi)
ponownie uruchamia główną pętlę, aby przejść do następnej (powyżej pokazano na początku kolejki).źródło
x 86,
4137353328 bajtówMiałem dużo zabawy z różnymi instrukcjami x86, ponieważ jest to moja pierwsza „nietrywialna” odpowiedź x86. Właściwie nauczyłem się najpierw x86-64 i zaoszczędziłem wiele bajtów, konwertując mój program do wersji 32-bitowej.
Okazuje się, że algorytm, którego użyłem z OEIS, wypycha wartości do tablicy, co czyni go podatnym na x86 i przechowuje wartości na stosie (uwaga, że MIPS nie ma instrukcji stosu).
Obecnie program pobiera
N
wartości jako dane wejścioweecx
i zwraca adresebp
tablicy z n-tym elementem reprezentującym n-tą wartość w sekwencji. Zakładam, że zwracanie na stosie i obliczanie dodatkowych wartości jest prawidłowe (i tak uważamy to, co poza tablicą, za śmieci).Dziennik zmian
-4 bajty, obliczając
x = 2 - n%2
przyxor
każdej iteracji-2 bajty przy użyciu pętli do-while zamiast while.
-2 bajty, przesuwając wartości początkowe 1, 2, 2 za pomocą
eax
-5 bajtów, nie przechowując
n
jawnie i zamiast tego uruchamiającN
czasy pętliObjdump:
źródło
C (gcc) ,
7271656462 bajty-9 bajtów dzięki @ceilingcat
Wypróbuj online!
Generuje wartości sekwencji w nieskończoność (opcja 3 z wyzwania)
źródło
for($x=$y=-1;;$y=$y+1|$f&.5*$x^=$f=$y&-$y-2)echo$x&1?:2;
. 2)50-x%2
powinien zachować dla Ciebie jeden bajt. 3) Próbowałem uruchomić gox=y=1
; ale jak dotąd nie udało się poprawnie wykonać operacji. Czy możesz?Perl 5 , 36 bajtów
Wciąż trywialna modyfikacja klasycznego rozwiązania TPR (0,3):
Wysyła serię od
0
don
Wypróbuj online!
źródło
JavaScript ES6 -
717068 bajtów1 bit zapisany dzięki Neilowi
Dziękujemy Shaggy'owi za naprawienie mojego błędu, a także za zapisanie 1-bitowego.
źródło
x=0
zamiastx=1
), ale @Shaggy rzeczywiście ma rację: to nie działa w obecnej formie (dodałem,i=100;i-->0
tymczasowo, aby zobaczyć tylko 100 pierwszych elementów, zamiast konieczności odczekaj 60 sekund, zanim zobaczysz wynik). Nie mam pojęcia, dlaczego to nie działa. JS to nie moja sprawa.1.
inicjowaniex
do 0 zamiast 1 (jak wspomniano @KevinCruijssen) i2.
sprawdzanie, czyx
th znak w ciągu, który może być zawsze 1 lub 2, jest większy niż 49.(_[x]*10-9)
niż(_[x]>1?11:1)
Nasiona jabłek , 89 bajtów
Definiuje funkcję,
K
która nie przyjmuje argumentów i zwraca sekwencję Kolakoski jako nieskończoną listę. Wypróbuj online!To podejście zostało zainspirowane odpowiedzią Haskell całkowicie ludzką . Moje oryginalne podejście było dłuższe i prawdopodobnie było O (2 ^ n). : ^ P
Nie golfił
Lista zwrotów zaczyna się od
(1 2)
. Następnie, aby wygenerować resztę (odczyt od wewnątrz):(kolakoski)
aby uzyskać listę sekwencji Kolakoski (z powodu leniwej oceny nie ma znaczenia, że lista nie została jeszcze w pełni wygenerowana)(cycle (list 1 2))
tworzy nieskończoną listę(1 2 1 2 1 2 ...)
repeat-val
. Powtórzy to1
lub2
zcycle
listy jeden lub dwa razy, w zależności od powiązanej wartości z listy Kolakoski. Wynik:((1) (2 2) (1 1) ...)
flatten
ta lista do(1 2 2 1 1 ...)
(concat (list 1 2)
, więcdrop
pierwsze dwa z wygenerowanej listy, aby uniknąć powielania.źródło
Stax , 12 bajtów
Uruchom i debuguj
Jest to reprezentacja ascii tego samego programu.
Rozszerza sekwencję x razy, gdzie x jest wejściem. Następnie wyprowadza go do X th elementu 0 indeksowane.
Oto dodatkowe 12-bajtowe rozwiązanie, które generuje dane wyjściowe w postaci nieskończonego strumienia. Naciśnij Uruchom, aby rozpocząć.
źródło
R, 63 bajty lub 61 bajtów
Implementacja 1: wypisuje n- ty termin sekwencji.
Implementacja 2: wypisuje pierwsze n warunków sekwencji.
(Różnica dotyczy tylko ostatniego wiersza).
Tak, tak, możesz narzekać, że moje rozwiązanie jest nieefektywne, że oblicza naprawdę więcej terminów niż jest to potrzebne, ale nadal ...
Aktualizacja: Podziękowania dla @Giuseppe za stratę 9 bajtów.
źródło
a=c(a,rep(2-n%%2,a[n]))
zamiast drugiejfor
pętli, aby zgolić niektóre bajty.Język programowania Szekspira, 575 bajtów (ale uszkodzony) lub 653 lub 623 bajtów
W mocno kwestionowanej kategorii SPL pobiłoby to obecny wpis Jo Kinga (583 bajty), z tym wyjątkiem, że jest wadliwy: po pierwsze, nie działa w wersji TIO (implementacja strony internetowej SPL) - ale działa w Perlu wersja , więc może nie jest to poważna wada. Po drugie, nie wypisuje pierwszych dwóch cyfr. Gdybyśmy dopuścili tę wadę w rozwiązaniu Jo Kinga, wówczas to wadliwe rozwiązanie miałoby 553 bajty, pokonując moje wadliwe rozwiązanie.
Moje rozwiązanie zawodzi w przypadku TIO z dwóch powodów: staramy się polegać na pustym stosie zwracającym zero po wyskakowaniu; i mamy pierwszą scenę z „[Enter Ford and Puck]”, mimo że nikt nie opuścił sceny. Są to tylko ostrzeżenia w wersji Perl. Jeśli naprawię te błędy i wstawię pierwsze dwie cyfry, osiągnę 653 bajty:
Wypróbuj online!
Mogę wygenerować pełną sekwencję w implementacji Perla przy użyciu 623 bajtów:
Chciałbym jednak zauważyć, że to rozwiązanie jest szybkie w porównaniu z wieloma innymi rozwiązaniami i wykorzystuje logarytmiczne ilości pamięci zamiast przechowywania całej listy. (Jest to podobne do rozwiązania C Vazta, z którym jest daleko związane.) Nie ma to znaczenia dla golfa, ale mimo to jestem z niego zadowolony. Możesz wygenerować milion cyfr w około minutę w Perlu (na przykład, jeśli potokujesz do sed i wc, aby uzyskać liczbę cyfr), gdzie inne rozwiązanie może dać ci kilka tysięcy cyfr.
Wyjaśnienie
Przechowujemy sekwencję zmiennych w kolejności: stos Pucka (od dołu do góry), wartość Pucka, wartość Forda, stos Forda (od góry do dołu). Poza zerowymi wartościami na końcach (z zerowym po lewej stronie może wynikającym z wybicia pustego stosu), każda wartość jest cyfrą wygenerowaną w następnym pokoleniu, z 2 dodanymi, jeśli następne pokolenie musi mieć kolejne dziecko z tego rodzica. Kiedy w sekwencji mamy N niezerowych wartości, generujemy wszystkie dzieci aż do N-tej generacji włącznie, w rodzaju przejścia przez drzewo w pierwszej głębokości. Drukujemy wartości tylko z N-tej generacji. Po całkowitym wygenerowaniu N-tej generacji przechowywane wartości są w rzeczywistości wartościami początkowymi dla generacji 2 do (N + 1), więc dodajemy 2 po lewej stronie i rozpoczynamy od nowa, tym razem generując (N + 1 ) -tego pokolenia.
A więc zarys: Scena X: Kiedy tu dotrzemy, zaczyna się nowa podróż. Krążek == 0. Opcjonalnie wypychamy to zero na stos Pucka i ustawiamy Puck = 2. Scena L: Jeśli Ford == 0, osiągnęliśmy generację drukowania. Jeśli nie, goto V. W przypadku drukowania, jeśli wartość w Pucku została dodana 2, usuń 2 i wydrukuj dwa razy; jeśli nie, wydrukuj go raz. Scena M: Jest to pętla, w której wielokrotnie przełączamy wartość Pucka i wracamy do sekwencji. Powtarzamy, dopóki nie dojdziemy do końca (krążek == 0), w którym to przypadku osiągamy X, lub osiągniemy wartość, która potrzebuje innego dziecka (krążek> 2), w którym to przypadku odejmujemy dodatkowe 2 i idziemy do przodu w V. Scena V: Idziemy do przodu. Jeśli Puck ma 2 lub 4 lata, następne pokolenie będzie zawierać dwoje dzieci z obecnego rodzica, więc Ford + = 2. Przejdź do przodu przez sekwencję. Idź do L, aby sprawdzić zakończenie.
źródło
axo , 13 bajtów
Wypróbuj online!
Wyjaśnienie
Zaczęło się to jako port alternatywnego rozwiązania w mojej odpowiedzi Wumpus :
Spowodowało to 18 bajtów. Skończyłem grać w golfa aż do 13 bajtów, które widzisz powyżej, aby dostosować go bardziej do sposobu działania axo. Ta 13-bajtowa wersja ostatecznie zainspirowała ulepszenie do 11 bajtów w Wumpus, więc teraz jest faktycznie bliższa tej wersji.
Podobnie jak w Wumpus, w iteracji i , spód stosu zawiera (i) -1, a góra zawiera pierwszy element i- tego przebiegu, ale pracujemy z 0 i 1 przez cały czas, z wyjątkiem drukowania.
źródło
Rubinowy ,
4539 bajtówdrukuje w nieskończoność
Wypróbuj online!
Wypróbuj to z funkcją przeciążenia drukowania, która pozwala wybrać separator i liczbę wydrukowanych elementów
źródło