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 e
zwraca 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 I
zwraca pustą tablicę (falsy); jeśli są co najmniej dwie cyfry, I
zwraca 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 E
zwraca 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 E
zwraca 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 G
stara 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 p
oczekuje 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 V
zamienia 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 V
analizuje ciąg, uzyskując [11] . Jeszcze raz V
zamienia 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 Q
odrzuca drugie 1 i V
ponownie 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) . A
jest atomem wartości bezwzględnej , więc odwzorowuje - (z + 1) = z + 1 . Przy początkowej wartości zwracanej 0 trzynaście kopii ~A
zwrotu 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 m
konkatenató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
C
jest atomem dopełniacza i odwzorowuje swój argument z na 1-z . N
jest atomem negującym i odwzorowuje swój argument z na -z . Razem CN
odwzorowuje z na - (1-z) = z-1 , więc osiemnaście kopii zamienia domyślny argument 0 na -18 . Ostateczne zastosowanie C
plonó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 J
usuwa 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 . J
Atom 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 H
kolei 100 na 50 , a następnie 50 na 25 .
ØaM
Stała Øa
zawiera małe litery. Maksymalny atom M
daje 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 i
sprzyja jego lewy argument 0 do [0] , a następnie znajdowany jej prawym argumencie 0 w tej tablicy, otrzymując 1 .
Zakres atom r
konstruuje 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 i
znajduje 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 ). c
w 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 T
zawiera 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 U
odwró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 R
przekształca [1, ..., 31] . W końcu atom ogonaṪ
wydobywa ostatni element, zwracając 31 .
LµdddddµFL
Długość atom L
promuje 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 d
wydajnoś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] . d
dział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 F
unnests tej tablicy, uzyskując płaską tablicę jeden oraz 31 zerami. Wreszcie L
zajmuje 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 v
zamienia 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 v
i po prostu daje wynik [10] .
Kopiowania Szybkie ©
przywiązuje do v
i kopiuje jej wyniku do rejestru. Późniejsze wystąpienia atomu przywracania®
(nilad) będą pobierać [10] z rejestru.
Kolejne trzy kopie żv
pracy 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żv
dodaje 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ł 111111
ustawia argument i początkową wartość zwracaną na 111111 . Inne serie 1
są również dosłowne.
l
jest 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 K
dołą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 1111111
znajduje się nie do rozdzielenia nilad, więc poprzednia zwracana wartość ( [4] ) jest drukowana do STDOUT, a następnie zastępowana wartością nilad ( 1111111 ). K
nastę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, l11
oblicza 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 ,SS
jest 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ń Æn
oblicza piętnastą liczbę pierwszą, czyli 47 .