Galaretka , 47 liczb całkowitych, 519 bajtów
e
BI$⁼#
⁾⁾⁾Ụ^/
ı***ıḞḞ
5
6
7
.::::
9
EȮ<
⁻GṘ
=`p`VV×`DQV
~A~A~A~A~A~A~A~A~A~A~A~A~A
⁷ṾṾṾw
⁴ḟ€⁴Ṁ
mmmmċ
ṭṭṭṭṭṭṭṭḍḄḄḄḄḄḄḄḄḄ
+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ
CNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNC
ĖḌĖḌ
ṫṣȦJṫȦ⁸ȦJ
22
“@ṃ»
!ḤḤ!
³HH
ØaM
;;;;;;;;;;;;;;;;;;;;;;;;;;;¬¬ḅ¬
irið8c
⁶ḲĠṂ°İṂĊ
œṡ¹ẆẆTUṖṖṖṖP
ȷ½RṪ
LµdddddµFL
33
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWŒḊ
ẇɓæ«æ«æ«æ«æ«|æ«|
⁹ṚḢ²
‘‘‘0‘‘‘‘‘‘‘
’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ạ
-____---__________
”(O
⁵ḶxḶ⁵ị⁵ḶxḶḣṢ
⁽{ʂ%⁽{}
ẊẠżv©żvżvżvọ®®Ạżvżvżvọ®
44
111111l11&K1111111Kl11&
,SS¶ỊỊ,ÇS¶ÇÑÇÇÇÑ
ÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆn
Każda linia to osobny, pełny program.
Wypróbuj online! (obejmuje zestaw testów i moduł sprawdzania skrzyżowań)
Jak to działa
Każdy pełny program bez argumentów wiersza poleceń wykonuje swój główny link (zdefiniowany w ostatnim wierszu) niladycznie, tzn. Bez danych wejściowych. Jeśli pierwsze łącze w łańcuchu jest zerowe, zostaje zużyte, wywołane, a argument argumentu głównego i wartość zwracana są ustawiane na wynik; jeśli pierwsze ogniwo w łańcuchu to monada lub diada, nie jest ono zużywane i zamiast tego używany jest domyślny argument i wartość zwracana 0 . W obu przypadkach reszta łańcucha jest wykonywana monadycznie.
Galaretka zmienia swoją produkcję w kilku przypadkach. W szczególności tablica singletonów jest drukowana bez otaczających ją nawiasów, więc 42 i [42] i nie można ich odróżnić po wydrukowaniu. Użyjemy tego kilka razy.
1 - 10
e
Istnieją testy atom Jeśli wartość 0 należący do argumentu 0 . Tak, więc ezwraca 1 .
BI$⁼#
BI$jest szybkim łączem, w szczególności łańcuchem monadycznym utworzonym przez szybkie $grupowanie atomu binarnegoB i atomu przyrostowegoI . Łącznie przekształcają liczbę całkowitą w tablicę jej cyfr w podstawie 2, a następnie obliczają różnice w przód wynikowych cyfr. Jeśli tablica ma tylko jeden element, nie ma różnic naprzód i Izwraca pustą tablicę (falsy); jeśli są co najmniej dwie cyfry, Izwraca niepustą tablicę (prawda).
Szybkie #zużywa poprzednie szybkie łącze i stosuje je do 0 , 1, 2,… aż do znalezienia wystarczającej liczby dopasowań i zwraca tablicę dopasowań. Wymagana kwota jest obliczana przez ⁼, który porównuje zwracaną wartość / argument 0 do siebie, dając 1 . Zatem cały program zwraca [2] , pierwszą nieujemną liczbę całkowitą z dwiema cyframi w bazie 2.
⁾⁾⁾Ụ^/
⁾⁾⁾jest literałem ciągu, w szczególności ciągu ⁾⁾ . Stopień się atom Ụsortuje swoje wskaźniki od odpowiadających im wartości; ponieważ oba znaki są równe, daje to [1, 2] . Wynikowa tablica jest redukowana bitowym XOR ^/, więc cały program zwraca 3 .
ı***ıḞḞ
ıinicjuje argument i zwraca wartość do urojonej jednostki i . *jest diadem potęgowania , którego prawy argument jest domyślnie argumentem głównego linku. Tak więc ***ıoblicza ((i i ) i ) i ≈ 4,81 + 0i , Ḟatom ( podłoga dla prawdziwych argumentów, część rzeczywista dla argumentów złożonych) oblicza część rzeczywistą ( 4.81 ), a następnie Ḟpodłogi, uzyskując 4 .
5
6
7
Te trzy programy składają się z jednego literału i robią dokładnie to, czego można oczekiwać.
.::::
Dosłowność .jest skrótem dla 0,5 i inicjuje argument i wartość zwracaną. Przez podział całkowitą (diad w :) bezpośrednio argumentem standardowo argumentu główne szlaki tak ::::oblicza 0,5 / 0,5 / 0,5 / 0,5 / 0,5 , otrzymując 8 .
9
Kolejny dosłowny.
EȮ<
Cały równy atom Ezwraca 1, jeśli wszystkie elementy w argumencie są równe, a 0, jeśli nie. Argument liczby całkowitej z jest promowany do [z] , więc Ezwraca 1 dla niejawnego argumentu 0 .
Teraz wyjściowy atom Ȯwypisuje 1 na STDOUT. Następnie porównujemy 1 z niejawnym argumentem 0, używając mniej niż atom <. Wynikiem jest (1 <0) = 0 i jest ono domyślnie drukowane po zakończeniu programu.
11–20
⁻GṘ
Siatki atom Gstara się wizualnie przyjemny stolik z jego argumentacji. W przypadku zwykłego argumentu liczby całkowitej (tutaj: 0 ) po prostu otacza go tablicą. Płaskim nie równy atom ⁻porównuje niejawnego argumentu 0 w związku z czym do prawej ( [0] ), uzyskując 1 od argumenty nie są równe. W reprezentacji atom Ṙodbitki 1 do standardowe wyjście i powraca do swojego wyniku. Pod koniec programu końcowa wartość zwracana jest domyślnie drukowana, więc otrzymujemy wynik 11 .
=`p`VV×`DQV
Samo szybko `zamienia dyad do monady poprzez wywołanie go z identycznymi argumentami lewych i prawych. Po pierwsze, =`porównuje domyślny argument 0 z samym sobą, dając 1 .
Iloczyn atom poczekuje listy której argumentami tak promuje całkowitą 1 w stosunku do zakresu [1, ..., 1] = [1] . p`bierze iloczyn kartezjański [1] i siebie, dając [[1, 1]] .
Eval atom Vzamienia wszystkie tablice płaskie (zawierające tylko cyfry i znaki) do ciągów, a następnie ocenia wynikające sznurki jak niladic programów galaretki. [[1, 1]] jest najpierw przekształcane w [„11”] , a następnie Vanalizuje ciąg, uzyskując [11] . Jeszcze raz Vzamienia tę tablicę na „11” , a następnie sprawdza ją, uzyskując 11 .
Teraz ×`mnoży 11 ze sobą, dając 121 . Dziesiętny atom obraca 121 w [1, 2, 1] The unikalny atom Qodrzuca drugie 1 i Vponownie włącza listę cyfr do liczby całkowitej, która wynika z ich łączenie, zwracając 12 .
~A~A~A~A~A~A~A~A~A~A~A~A~A
~jest bitowym NIE atomem. Z arytmetyką dopełniania dwóch odwzorowuje argument z na ~ z = - (z + 1) . Ajest atomem wartości bezwzględnej , więc odwzorowuje - (z + 1) = z + 1 . Przy początkowej wartości zwracanej 0 trzynaście kopii ~Azwrotu 13 .
⁷ṾṾṾw
Stała ⁷przechowuje znak nowej linii „\ n” i inicjuje argument oraz wartość zwracaną.
Uneval atom Ṿpróby stworzenia reprezentacji ciąg jej argumentu Z , tak że program galarety składająca się z tym kodem wróci z .
Pierwsze wywołanie sumiennie zwraca ciąg „” \ n ” , który jest dosłowny. Następne połączenie zwraca „” ”,„ \ n ” - parę literałów znakowych. Trzecie i ostatnie wywołanie zwraca „” ”,„ ”,” ,, ””, „\ n” - pięciokrotny literał znakowy.
Na koniec atom indeksu oknaw promuje swój prawidłowy argument „\ n” do ciągu „\ n” i znajduje pierwszy indeks podłańcucha zaczynający się od „\ n” . Zwraca 14 .
⁴ḟ€⁴Ṁ
⁴jest stałą 16 . Filtr szybkiego odnośnika filterfalse each ( ḟ€) promuje swój lewy argument 16 do zakresu [1,…, 16] , a następnie iteruje swoje elementy.
Dla każdego elementu Z , ḟ⁴wykonywana jest najpierw promowania Z do [Z] , a następnie usunięcie wszystkich (jeśli w ogóle) występujące 16 . Daje to tablicę [[1], [2],…, [14], [15], []] , gdzie ostatnia tablica jest pusta, ponieważ zawierała 16 .
Wreszcie maksymalny atom Ṁwybiera [15] .
mmmmċ
Modułowy atom m- wywoływana z zastosowaniem argumentów x (array) i y (całkowita) trwa zwykle co | y | ty element x , począwszy od pierwszego jeśli y> 0 , przy czym ostatni jeśli y <0 . Jednak gdy y = 0 , zwraca x skonkatenowane z odwrotnością.
Argument lewej liczby całkowitej 0 jest najpierw promowany do [0] . Pierwsza kopia mkonkatenatów [0] ze sobą, dając [0, 0] . Pozostałe kopie zamieniają ten wynik na [0, 0, 0, 0] , a następnie [0, 0, 0, 0, 0, 0, 0, 0] , a na koniec [0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] .
W końcu, liczba atomów ċzlicza liczbę niejawny argumentów 0 pojawia się w macierzy wynikowej, powracający 16 .
ṭṭṭṭṭṭṭṭḍḄḄḄḄḄḄḄḄḄ
ṭjest hals atom i dołącza swój lewy argument do jej prawej. Ponieważ ṭi poniższe ḍsą dynamiczne, wszystkie wywołania ṭprzekazujące domyślny argument 0 jako właściwy argument ṭ. Pierwsze połączenie zwraca [0, 0] , drugie [0, [0, 0] , a ósme i ostatnie [0, [0, [0, [0, [0,] 0]]]]]]]] .
ḍjest atomem podzielności ; argumentów X i Y , to zwraca 1 to x jest podzielna przez r , 0 , jeżeli nie. Ḅjest opcją dla liczb całkowitych, więc ḍḄtestuje 0 na podzielność przez każdą liczbę całkowitą w skonstruowanej tablicy. 0 jest podzielne samo w sobie, więc otrzymujemy [1, [1, [1, [1, [1, [1, [1, [1, 1]]]]]]]] .
Teraz niebinarny atom Ḅdziała na płaskich tablicach. Dla pary [a, b] zwraca po prostu 2a + b . Jak wspomniano wcześniej, Ḅbrak opcji dla liczb całkowitych: argument liczby całkowitej c jest promowany do [c] , a [c] w dowolnej bazie to po prostu c .
Pierwsze wezwanie do Ḅzmniejszenia [1, 1] do 3 , co daje [1, [1, [1, [1, [1, [1, [1, 3]]]]]]] . Następne połączenie zmniejsza [1, 3] do 5 , następne [1, 5] do 7 i tak dalej, aż dziewiąta Ḅzwróci 17 .
+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ
Ṇjest płaskim logicznym atomem NOT i odwzorowuje domyślny argument od 0 do 1 . +jest atomem dodawania, więc każda z osiemnastu kopii +Ṇprzyrostu poprzedniej wartości zwracanej (początkowo 0 ). Cały program zwraca zatem 18 .
CNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNC
Cjest atomem dopełniacza i odwzorowuje swój argument z na 1-z . Njest atomem negującym i odwzorowuje swój argument z na -z . Razem CNodwzorowuje z na - (1-z) = z-1 , więc osiemnaście kopii zamienia domyślny argument 0 na -18 . Ostateczne zastosowanie Cplonów 1 - (-18) = 19.
ĖḌĖḌ
Enumerate atom Ėwylicza elementów w szeregu, tworząc pary wskaźnik wartości. Domniemany argument 0 jest promowany do [0] , a następnie Ėdaje [[1, 0]] . Undecimal atom przekształca płaską macierz od podstawy 10, do liczby całkowitej, otrzymując [10], w tym konkretnym przypadku.
Drugie wezwanie do Ėprzekształcenia [10] w [[1, 10]] , które drugie Ḍostatecznie przekształca w [20] .
21–30
ṫṣȦJṫȦ⁸ȦJ
Ogon atom ṫ(diada) wybrać postfix jego lewego argumentu, który zaczyna się przy indeksie (1 oparte modułowy) określony w prawym argumencie, promując lewego argumentu całkowitą x do [x] . Po wywołaniu z obydwoma argumentami ustawionymi na 0 , ṫzwraca [0] .
Wszelkie atom Ȧzwraca 1 , jeśli jej argument truthy i nie zawiera zer na dowolnej głębokości, 0 w inny sposób. Tutaj po prostu używamy go jako funkcji tożsamości, aby zwrócić domyślny argument 0 . Podzielonego na atomie ṣdzieli swój lewy argument [0] na wystąpień jego prawego argumentu 0 , więc zwraca [[], []] tutaj.
Indeksy atom Jusuwa elementy wartość powrotną i zastępuje je z ich wskaźników, otrzymując ZAKRES [1, 2] , w tym konkretnym przypadku. Ȧi ṫoba działają tak jak poprzednio, więc zmniejszają [1, 2] do postfiksa, który zaczyna się od ostatniego indeksu, dając [2] .
W łączach niladycznych stała ⁸utrzymuje [] . Jest to nie do rozdzielenia nilad, tzn. Nie pasuje w żaden sposób do łańcucha. W rezultacie poprzednia zwracana wartość ( [2] ) jest drukowana do STDOUT, a następnie zastępowana wartością nilada ( [] ).
Ponieważ [] jest fałszem, Ȧprzekształca go w 0 . JAtom sprzyja 0 do [0] , a następnie powraca do swojej listy indeksów ( [1] ), która jest pośrednio drukowanych po zakończeniu programu.
22
Kolejny dosłowny. Wydaje się, że reprodukcje są najlepszym miejscem do ich wykorzystania.
“@ṃ»
Wykorzystuje to wbudowaną kompresję sznurkową Jelly. Wskaźniki @ i ṃ na stronie kodowej Jelly to 64 i 220, a literały łańcuchowe mogą zawierać 250 różnych znaków, więc to najpierw oblicza liczbę całkowitą 250 × 65 + 220 = 16470 .
16470 można podzielić przez 3, więc iloraz 16470/3 = 5490 koduje drukowalny znak ASCII lub linię. Jest ich 96 i 5490 = 96 × 57 + 18 , co oznacza, że zdekodowaliśmy znak ASCII , który można wydrukować, o indeksie 18 opartym na 0 , czyli „2” .
Pozostaje nam 57 , która również jest podzielna przez 3 , więc iloraz 57/3 = 19 = 96 × 0 + 19 koduje drukowalny znak ASCII przy indeksie 18 opartym na 0 , czyli „3” .
To pozostawia 0 ; proces dekodowania zostaje zatrzymany. Wygenerowane znaki są łączone w postaci „23”
!ḤḤ!
Silnia atom !obraca niejawnego argumentu 0 do 1 . Dwie inwokacje atomu nieopuszczalnegoḤ zamieniają 1 w 2 , a następnie 2 w 4 . Wreszcie !oblicza 4! = 24 .
³HH
W przypadku braku argumentów wiersza poleceń stała ³ma wartość 100 . Dwie inwokacje z Hkolei 100 na 50 , a następnie 50 na 25 .
ØaM
Stała Øazawiera małe litery. Maksymalny atom Mdaje wszystkie indeksy maksymalnej pozycji, a ponieważ oo jest największym mała litera, wynik jest [26] .
;;;;;;;;;;;;;;;;;;;;;;;;;;;¬¬ḅ¬
Dwadzieścia sześć kopii konkatenowanego atomu ;konkatenuje początkową wartość zwracaną 0 i dwadzieścia sześć instancji domyślnego argumentu 0 , tworząc tablicę 27 zer.
¬jest logicznym atomem NOT , więc ;¬dodaje 1 do tablicy zer. Następny ¬neguje wszystkie elementy w tablicy, pozostawiając nam tablicę 27 jedności i 1 zero.
ḅjest atomem bazowym i konwertuje tablicę cyfr z lewego argumentu z podstawy określonej w prawym argumencie na liczbę całkowitą. ḅ¬konwertuje z jedności na liczbę całkowitą, więc po prostu wykonuje sumę. W przypadku tablicy 27 zwraca 27 .
irið8c
Wskaźnik atom isprzyja jego lewy argument 0 do [0] , a następnie znajdowany jej prawym argumencie 0 w tej tablicy, otrzymując 1 .
Zakres atom rkonstruuje rosnąco lub malejąco zakres od niego pozostało argument do jej prawej. Właściwym argumentem jest domyślny argument 0 , więc daje to [1, 0] . Drugie wywołanie funkcji iznajduje indeks 0 w [1, 0] , dając 2 .
ðrozpoczyna nowy, dynastyczny łańcuch. Ponieważ poprzedni łańcuch był zerowy, zarówno lewy, jak i prawy argument tego łańcucha będą równe wartości zwracanej przez pierwszy łańcuch ( 2 ). cw kombinacjach atom. Z lewym argumentem 8 i prawym argumentem 2 zlicza wszystkie unikalne, nieuporządkowane 2 kombinacje zestawu 8 elementów, zwracając 8C2 = 8! / (6! 2!) = 28 .
⁶ḲĠṂ°İṂĊ
Stała ⁶przechowuje znak spacji i ustawia argument oraz zwraca wartość na „” . Słowa atom Ḳpromuje postać „” do jednoelementowy łańcucha „” i rozdziela go w przestrzeni, w wyniku czego otrzymano [[], []] .
Grupowe atomowych Ġwszystkich grup wskaźników jednakowych elementów. Ponieważ oba elementy ostatniej wartości zwracanej są równe, zwraca tutaj [[1, 2]] tutaj. Minimalna atom wyodrębnia minimalnej (tylko) elementem macierzy, otrzymano [1, 2] .
Stopień atom °przetwarza obie liczby całkowite ze stopni sześćdziesiątkowa do radianach, otrzymując 1 ° x 2π / 360 ° = p / 180 i 2 x 2π ° / 360 ° = π / 90 . Odwrotny atom bierze multiplikatywnej odwrotności, otrzymując 180 / gatunku ≈ 57,3 i 90 / gatunku ≈ 28,6 .
Następnie Ṃponownie przyjmuje minimum, uzyskując 28,6 . Ostatecznie atom sufituĊ przekształca 28,6 w 29 .
œṡ¹ẆẆTUṖṖṖṖP
Tożsamość atom ¹powraca 0 do utajonego argumentu 0 . Podzielonego wokół atomu œṡsprzyja jego obu argumentów (oba 0 ) do [0] , a następnie dzieli [0] wokół sąsiadujących subarrays równych [0] . Daje to [[], []] .
Okno przesuwne atom Ẇtworzy stycznymi subarrays jej argumentu. Pierwsze wystąpienie przekształca [[], []] w [[[]], [[]], [[], []]] , drugie wystąpienie przekształca [[[]], [[]], [[] , []]] na
[[[[[]]], [[[]]], [[[], []]], [[[]], [[]]], [[[]], [ [], []]], [[[]], [[]], [[], []]]] .
Prawda atom Tzawiera wszystkie indeksy pierwiastków truthy. Żadna z tablic na pierwszym poziomie nie jest pusta, więc daje to [1, 2, 3, 4, 5, 6] . Odwracania atom Uodwrócenie tej tablicy, otrzymując [6, 5, 4, 3, 2, 1] .
Cztery kopie atomu popṖ usuwają cztery ostatnie elementy, pozostawiając nam [6, 5] . Na koniec atom produktuP przekształca tę tablicę w 30 .
31–40
ȷ½RṪ
ȷjest skrótem dla 1 × 10 3 = 1000 . Pierwiastek atom ½daje 31,6 , którego zakres atom Rprzekształca [1, ..., 31] . W końcu atom ogonaṪ wydobywa ostatni element, zwracając 31 .
LµdddddµFL
Długość atom Lpromuje niejawnego argumentu 0 do [0] , a następnie wykonuje się w celu uzyskania długości 1 . µrozpoczyna nowy, monadyczny łańcuch, a wynik 1 staje się jego argumentem.
Argumentów X i Y , z divmod atom dwydajności [X / Y, X% y] . Każde połączenie będzie miało y = 1 , więc wynik będzie zawsze wynosił [x, 0] .
Pierwsze wywołanie zaczyna się od x = 1 , dając [1, 0] . ddziała tylko na liczbach całkowitych, więc wektoryzuje w kolejnych wywołaniach. Drugie połączenie daje [[1, 0], [0, 0]] , trzecie [[[1, 0], [0, 0]], [[0, 0], [0, 0]]] , a piąty i ostatni to tablica o głębokości 5, która zawiera jeden i 31 zer.
µponownie rozpoczyna się nowy, monadyczny łańcuch, a tablica z przeszłości staje się jego argumentem. Płaskim atom Funnests tej tablicy, uzyskując płaską tablicę jeden oraz 31 zerami. Wreszcie Lzajmuje długość wynikowego, zwracając 32 .
33
Kolejny repdigit, kolejny dosłowny.
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWŒḊ
Każde wystąpienie atomu zawijania przekształca swój argument z na [z] . Przy początkowej wartości zwracanej 0 wszystkie 34 wystąpienia łącznie dają [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[0]]] ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] . Na koniec atom głębokościŒḊ oblicza maksymalną głębokość wynikowej tablicy, zwracając 34 .
ẇɓæ«æ«æ«æ«æ«|æ«|
Okno istnieje atom ẇsprzyja jego obu argumentów (obydwa odnoszą się do 0 ) do [0] , a następnie sprawdza, czy ** [0] ** występuje jako ciągła subarray w [0] . Tak, więc ẇzwraca 1 .
ɓrozpoczyna nowy, dynastyczny łańcuch. Ponieważ poprzedni łańcuch był zerowy, zarówno lewy, jak i prawy argument tego łańcucha będą równe wartości zwracanej przez pierwszy łańcuch ( 1 ). Łańcuch wykorzystuje dwa różne, dyadyczne atomy: przesunięcie bitowe left ( æ«) i bitowe OR ( |).
Łańcuch diadad, który zaczyna się od trzech lub więcej diad, początkowo nazywa pierwszą diadem argumentami łańcucha. Tutaj daje to 1 << 1 = 2 . Sześć kolejnych diady są pogrupowane w pary (tak zwane widelce ), gdzie pierwsza skrajna prawa dyada jest wywoływana jako pierwsza z argumentami łańcucha, a następnie skrajna lewa jest wywoływana z poprzednimi wartościami zwracanymi po obu stronach.
Dla æ«æ«otrzymujemy 2 << (1 << 1) = 2 << 2 = 8 . Następnie æ«æ«oblicza 8 << (1 << 1) = 8 << 2 = 32 . Teraz |æ«dostaje 32 | (1 << 1) = 32 | 2 = 34 .
Wreszcie, trailing |działa jak hook i jest wywoływany z poprzednią wartością zwracaną jako lewym argumentem, a prawym argumentem łańcucha jako prawym. Zwraca 34 | 1 = 35 .
⁹ṚḢ²
W przypadku braku drugiego argumentu stała ⁹zawiera 256 . Odwrotnej atom promuje 256 do tablicy [2, 5, 6] i odwraca go w celu uzyskania [6, 5, 2] . Następnie atom głowyḢ wyodrębnia pierwszy element, a kwadratowy atom ²zwraca ** 6² = 36 *.
‘‘‘0‘‘‘‘‘‘‘
Przyrost atom ‘zwiększa swój argument 1 , tak ‘‘‘obrócić początkową wartość powrotną 0 do 3 . Poniższe 0 jest niemożliwym do rozdzielenia niladem, tzn. Nie pasuje w żaden sposób do łańcucha. W rezultacie poprzednia zwracana wartość ( 3 ) jest drukowana do STDOUT, a następnie zastępowana wartością nilada ( 0 ).
Kolejne 7 kopii ‘zamienia to 0 na 7 , które jest drukowane domyślnie po zakończeniu programu.
’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ạ
Ubytek atom ’zmniejsza swój argument 1 , tak trzydziestu ośmiu kopii kolei początkowa wartość powrotną 0 do -38 . Bezwzględna różnica atom ạoblicza bez znaku różnicy pomiędzy -38 i domyślne argumentu 0 , powracającą 38 .
-____---__________
-jest skrótem dla -1 i ustawia argument linku i zwraca wartość na -1 . Każda _jest instancją atomu odejmowania dynamicznego , którego prawy argument będzie domyślnie ustawiony na -1, jeśli go nie będzie.
Po pierwsze, -____-oblicza (-1) - (-1) - (-1) - (-1) - (-1) = 3 . Poniższe -1 jest nie do rozdzielenia nilad, więc poprzednia zwracana wartość ( 3 ) jest drukowana do STDOUT, a następnie zastępowana wartością nilad ( -1 ).
Następnie -_oblicza (-1) - (-1) = 0 , gdzie literał -ustawia lewy argument _i używa wartości zwracanej jako prawej. Następne dziewięć kopii _odejmuje domyślny argument -1 od wartości zwracanej, co daje 9 , która jest drukowana niejawnie po zakończeniu programu.
”(O
”(jest literałem znaku, a atom porządkowyO wyszukuje punkt kodowy Unicode, uzyskując 40 .
41–47
⁵ḶxḶ⁵ị⁵ḶxḶḣṢ
W przypadku braku trzeciego argumentu wiersza poleceń stała ⁵ma wartość 10 . Unlength atom Ḷtworzy szereg się w oparciu o 0, a konkretnie [0, ..., 9] do argumentu 10 , na obu stronach powtórzenia w miejsce atomu x. Ten ostatni dopasowuje elementy swojego lewego argumentu z powtórzeniami swojego prawego argumentu i powtarza każdy z elementów odpowiednią liczbę razy. Z argumentem [0,…, 9] jako argumentem zarówno lewym, jak i prawym, otrzymujemy zero zer, jeden, dwa dwójki itp.
Indeks do atomu ịpobiera element jego prawym argumencie w indeksie określonym w lewym. Z lewym argumentem 10 ( ⁵po lewej) i prawym argumentem [1, 2, 2, 3, 3, 3, 4, 4, 4, 4,…, 9] (poprzedni wynik), daje to 4 .
Po łańcuchu do tego punktu następuje nie dająca się oddzielić nilad ⁵, więc poprzednia wartość zwracana ( 4 ) jest drukowana do STDOUT, wartość zwracana jest ustawiona na 10 , a reszta łańcucha jest analizowana jak zwykle.
Tak jak poprzednio, ⁵ḶxḶda tablicę [1, 2, 2, 3, 3, 3, 4, 4, 4, 4,…, 9] . Tym razem nazywamy posortowany atom Ṣargumentem 10 , który promuje 10 do [1, 0] , a następnie sortuje go, aby uzyskać [0, 1] . Dwójkowym głowica atom pobiera teraz prefiksy długości 0 i 1 z wyniku w lewo, pozostawiając nas [[], [1]] . Po wydrukowaniu nic oprócz 1 pozostanie widoczne.
⁽{ʂ%⁽{}
⁽a jego dwa kolejne znaki stanowią literał liczbowy. Jeśli j i k są ich punktami kodowymi na stronie kodowej Jelly, a (j, k) <(124, 250) , otrzymujemy liczbę całkowitą 1001 + 250j + k . Punkty kodowe „{” , „}” i „ʂ” to 123 , 125 i 167 , więc lewy literał ma wartość 1001 + 250 × 123 + 167 (= 31918) , podczas gdy prawy ma wartość 1001 + 250 × 123 + 125 (= 31876) .
Ponieważ lewa liczba całkowita jest mniejsza niż dwa razy większa niż prawa, wynikiem jest (… + 167)% (… + 125) = (… + 167) - (… + 125) = 167- 125 = 42 .
ẊẠżv©żvżvżvọ®®Ạżvżvżvọ®
Shuffle atom Ẋlosuje kolejność elementów jej argument za; argument numeryczny z jest wcześniej promowany do zakresu [1,…, z] . Dla domyślnego argumentu 0 ten zakres jest pusty i Ẋdaje [] . Wszystkim atom Ạzwraca 1 , gdy wszystkie elementy swój argument są truthy, 0 ile nie. Ponieważ pusta tablica nie zawiera elementów fałszowania, Ạzwraca tutaj 1 .
Błyskawiczny z atomem ż(diada) wykonuje argumentów X i Y oraz transpozycję parę [x, y] . Dla liczb całkowitych x i y daje to po prostu [[x, y]] , więc ten konkretny ż, wywołany z argumentami 1 i 0 (argument niejawny), zwraca [[1, 0]] . Dwójkowym eval atom vzamienia wszystkie tablice płaskie (zawierające tylko cyfry i litery) Ja lewy argument do strun, a następnie ocenia wynikające sznurki jak monadycznych programów galaretki z jego prawego argumentu jako argumenty programów. Ponieważ [„10”]składa się wyłącznie z literałów, ignoruje to prawidłowy argument vi po prostu daje wynik [10] .
Kopiowania Szybkie ©przywiązuje do vi kopiuje jej wyniku do rejestru. Późniejsze wystąpienia atomu przywracania® (nilad) będą pobierać [10] z rejestru.
Kolejne trzy kopie żvpracy jak poprzednio, mapowanie [10] na [[10, 0] na [100] na ... na [10000] . W kolejności atom ọtesty ile razy jej lewy argument jest podzielna przez jego prawą, więc tutaj, to oblicza kolejności 10 (sprowadzone ®) w 10000 = 10 4 , otrzymując [4] .
Poniżej ®znajduje się nie do rozdzielenia nilad, więc poprzednia zwracana wartość ( [4] ) jest drukowana do STDOUT, a następnie zastępowana wartością nilad ( 10 ). Aplikujemy Ạnastępnie, uzyskując 1 . (Jest to wymagane, ponieważ w tym momencie można przeanalizować nilad, a następnie diadę).
Tak jak poprzednio, żvżvżvdodaje trzy zera do bieżącej wartości zwracanej, zmieniając 1 w [1000] . Na koniec ọ®oblicza kolejność 10 na 1000 = 10 3 , a 3 kończy się na STDOUT po zakończeniu programu.
44
Kolejna repedycja, jeszcze jedna dosłowność.
111111l11&K1111111Kl11&
Przede wszystkim literał 111111ustawia argument i początkową wartość zwracaną na 111111 . Inne serie 1są również dosłowne.
ljest atomem logarytmicznym , który oblicza logarytm swojego lewego argumentu do podstawy określonej w prawym. Po wywołaniu 111111 z właściwym argumentem 11 otrzymujemy log 11 111111 ≈ 4,85 .
Słowa atom Kdołącza się listę argumentów w przestrzeni, po promowanie numeryczny / znak Z do [z] . Tutaj po prostu używamy go do przekształcenia argumentu łącza 111111 na [111111] . (Nie wymagamy tutaj tablicy, ale zabrakło atomów tożsamości). Bitowy AND atom &przyjmuje wartości zwracane na obie strony, w razie potrzeby wyrzuca je na liczbę całkowitą i oblicza ich bitowe AND. W tym konkretnym przypadku zwraca [4,85 i 111111] = [4 i 111111] = [4] .
Poniżej 1111111znajduje się nie do rozdzielenia nilad, więc poprzednia zwracana wartość ( [4] ) jest drukowana do STDOUT, a następnie zastępowana wartością nilad ( 1111111 ). Knastępnie zamienia tę liczbę całkowitą na [1111111] . (To po raz kolejny nie jest tak naprawdę wymagane, ale w tym momencie można przeanalizować nilad, a następnie diadę).
Tak jak poprzednio, l11oblicza log 11 1111111 ≈ 5,81 , a następnie &zwraca [5,81 i 111111] = [5 i 111111] = [5] .
,SS
ỊỊ,ÇS
ÇÑÇÇÇÑ
Jest to jedyny program, który składa się z wielu linków zdefiniowanych przez użytkownika. Ostatni link jest linkiem głównym i jest wykonywany po uruchomieniu programu, pozostałe są linkami pomocniczymi. Szybkie Çzawsze odnosi się do linku powyżej bieżącego i wykonuje je monadycznie. Podobnie szybkie Ñzawsze odnosi się do linku pod bieżącym (zawijanie), a także wykonuje je monadycznie.
Górny związek składa się z pary atom ,- diada że obraca argumentów X i Y w [x, y] - a suma atom S- monady który promuje całkowitą argumentu Z do [Z] i zmniejsza argument tablicy addycja. Kiedy link ,SSjest wywoływany z argumentem liczby całkowitej n , oblicza Σ [n, Σn] = Σ [n, n] = 2n .
Środkowe ogniwo składa się z powyższych atomów, wspomnianego szybkiego Çi nieistotnego atomu Ị- monady, która daje 1 dla liczbowych argumentów z z -1 ≤ z ≤ 1 , ale 0 dla wszystkich innych. Stosując Ịdwukrotnie argument całkowitej n zasadzie zastępuje go 1 , na wyjściu pierwszego Ị(The wejściowego z drugim) jest zawsze znaczenia. Ten wynik jest następnie łączony z wartością zwracaną Ç(wywoływaną z argumentem n ), a wynikowa para jest zmniejszana o S. W sumie obliczamyΣ [(| n | ≤ 1) ≤ 1, 2n] = Σ [1, 2n] = 2n + 1 .
Po zastosowaniu tych dwóch linków pomocniczych główny link może teraz konstruować dowolną nieujemną liczbę całkowitą, patrząc na jego binarne cyfry. Przy początkowej wartości zwracanej 0 łańcuch ÇÑÇÇÇÑoblicza wynik końcowy ((((((0 × 2 + 1)) × 2) × 2 + 1) × 2 + 1) × 2 + 1) × 2 = ((5 × 2 + 1) × 2 + 1) × 2 = 46 .
ÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆn
Obok pierwsza atom znajduje najmniejszą liczbę dodatnią doskonałą który jest większy od jej argumentu. Przy początkowej wartości zwracanej 0 piętnaście wywołań Ænoblicza piętnastą liczbę pierwszą, czyli 47 .