Jelly , 47 ganze Zahlen, 519 Bytes
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
Jede Zeile ist ein eigenes, vollständiges Programm.
Probieren Sie es online! (Beinhaltet Testsuite und Kreuzungsprüfer)
Wie es funktioniert
Jedes vollständige Programm ohne Befehlszeilenargumente führt seine Hauptverknüpfung (in der letzten Zeile definiert) niladisch aus, dh ohne Eingabe. Wenn das erste Glied in der Kette ein Nullglied ist, wird es verbraucht und aufgerufen, und sowohl das Argument des Hauptglieds als auch der Rückgabewert werden auf das Ergebnis gesetzt. Wenn das erste Glied in der Kette eine Monade oder eine Dyade ist, wird es nicht verbraucht und stattdessen das implizite Argument und der Rückgabewert 0 verwendet. In beiden Fällen wird der Rest der Kette monadisch ausgeführt.
Gelee zerquetscht seine Ausgabe in mehreren Fällen. Insbesondere wird ein Singleton-Array ohne die umgebenden Klammern gedruckt, sodass 42 und [42] und nach dem Drucken nicht mehr zu unterscheiden sind. Wir werden dies bei mehreren Gelegenheiten verwenden.
1 - 10
e
Das Exists- Atom prüft, ob der Rückgabewert 0 zum Argument 0 gehört . Er tut, so e
gibt 1 .
BI$⁼#
BI$
ist ein Quicklink, insbesondere eine monadische Kette, die durch die schnelle $
Gruppierung des binären Atoms B
und des inkrementalen Atoms gebildet wird I
. Zusammen konvertieren sie eine Ganzzahl in das Array ihrer Ziffern in Basis 2 und berechnen dann die Vorwärtsdifferenzen der resultierenden Ziffern. Wenn das Array nur ein Element enthält, gibt es keine Vorwärtsunterschiede und es wird I
ein leeres Array (falsch) zurückgegeben. Wenn es mindestens zwei Ziffern I
gibt, wird ein nicht leeres Array zurückgegeben (truey).
Der Schnellzugriff verwendet #
den vorherigen Schnellzugriff und wendet ihn auf 0 , 1, 2, ... an, bis genügend Übereinstimmungen gefunden wurden, und gibt das Array der Übereinstimmungen zurück. Der erforderliche Betrag wird berechnet durch ⁼
, der den Rückgabewert / das Argument 0 mit sich selbst vergleicht und 1 ergibt . Somit gibt das gesamte Programm [2] zurück , die erste nicht negative Ganzzahl mit zwei Ziffern in Basis 2.
⁾⁾⁾Ụ^/
⁾⁾⁾
ist ein String-Literal, insbesondere der String ⁾⁾ . Das Grade-Up- Atom Ụ
sortiert seine Indizes nach ihren entsprechenden Werten. da beide Zeichen gleich sind, ergibt sich [1, 2] . Das resultierende Array wird mit bitweisem XOR verkleinert ^/
, sodass das gesamte Programm 3 zurückgibt .
ı***ıḞḞ
ı
Initialisiert das Argument und gibt den Wert an die imaginäre Einheit i zurück . *
ist die Potenzierungs- Dyade, deren rechtes Argument standardmäßig das Argument des Hauptlinks ist. ***ı
Berechnet also ((i i ) i ) i ≈ 4.81 + 0i , berechnet das Ḟ
Atom ( Boden für reelle Argumente, Realteil für komplexe) den Realteil ( 4.81 ) Ḟ
und ergibt dann Etagen 4 .
5
6
7
Diese drei Programme bestehen aus einem einzigen Literal und tun genau das, was Sie erwarten.
.::::
Das Literal .
ist eine Abkürzung für 0.5 und initialisiert Argument und Rückgabewert. Das rechte Argument des Ganzzahlteilungs- Dyads ( :
) entspricht standardmäßig dem Argument für die Hauptverknüpfung. ::::
Berechnet also 0,5 / 0,5 / 0,5 / 0,5 / 0,5 und ergibt 8 .
9
Noch ein wörtliches Wort.
EȮ<
Das Atom all equalE
gibt 1 zurück, wenn alle Elemente in seinem Argument gleich sind, und 0, wenn nicht. Ein ganzzahliges Argument z wird zu [z] heraufgestuft , daher E
wird 1 für das implizite Argument 0 zurückgegeben .
Nun werden die Ausgangsatom druckt 1 bis STDOUT. Wir vergleichen dann 1 mit dem impliziten Argument 0 unter Verwendung des Atoms less than . Das Ergebnis ist (1 <0) = 0 und wird implizit gedruckt, wenn das Programm beendet ist.Ȯ
<
11 - 20
⁻GṘ
Das Gitteratom versucht , eine optisch ansprechende Tabelle von seinem Argument zu machen. Für ein einfaches ganzzahliges Argument (hier: 0 ) wird es einfach in ein Array eingeschlossen. Das flache ungleiche Atom vergleicht das implizite Argument 0 mit dem Ergebnis rechts ( [0] ) und ergibt 1, da seine Argumente nicht gleich sind. Die Darstellung Atom druckt 1 bis STDOUT und gibt sein Ergebnis. Am Ende des Programms wird der endgültige Rückgabewert implizit gedruckt, sodass wir eine Ausgabe von 11 erhalten .G
⁻
Ṙ
=`p`VV×`DQV
Das Selbst`
verwandelt eine Dyade schnell in eine Monade, indem es sie mit identischen linken und rechten Argumenten aufruft. Zuerst =`
vergleicht die implizite Argument 0 mit sich selbst, wodurch man 1 .
Das kartesische Produkt Atom p
erwartet Listen als Argumente, so fördert die ganze Zahl 1 auf den Bereich [1, ..., 1] = [1] . p`
nimmt das kartesische Produkt von [1] und sich selbst und ergibt [[1, 1]] .
Das eval- Atom V
wandelt alle flachen Arrays (die nur Zahlen und Zeichen enthalten) in Strings um und wertet die resultierenden Strings als Niladic Jelly-Programme aus. [[1, 1]] wird zuerst in ["11"] umgewandelt , dann V
wird die Zeichenfolge ausgewertet und ergibt [11] . Noch einmal, V
macht dieses Array in „11“ , dann evals es ergeben 11 .
Nun ×`
multipliziert man 11 mit sich selbst und erhält 121 . Das Dezimalatom verwandelt 121 in [1, 2, 1] , das eindeutige Atom Q
verwirft die zweite 1 und V
verwandelt erneut eine Ziffernliste in die Ganzzahl, die sich aus ihrer Verkettung ergibt, und gibt 12 zurück .
~A~A~A~A~A~A~A~A~A~A~A~A~A
~
ist das bitweise NICHT Atom. Mit der Zweierkomplementarithmetik bildet es ein Argument z auf ~ z = - (z + 1) ab . A
ist das Absolutwertatom , es bildet also - (z + 1) = z + 1 ab . Mit dem anfänglichen Rückgabewert 0 , der dreizehn Kopien ~A
Rückkehr 13 .
⁷ṾṾṾw
Die Konstante ⁷
enthält das Newline-Zeichen '\ n' und initialisiert das Argument und den Rückgabewert.
Das unevale Atom Ṿ
versucht, eine Zeichenfolgendarstellung seines Arguments z zu erstellen, sodass ein Jelly-Programm, das aus diesem Code besteht, z zurückgibt .
Der erste Aufruf gibt pflichtgemäß die Zeichenfolge "" \ n "zurück , die ein Zeichenliteral ist. Der nächste Aufruf gibt "", "\ n" zurück - ein Paar Zeichenliterale. Der dritte und letzte Aufruf gibt "", "", ",," "," \ n "zurück - ein Fünffach der Zeichenliterale.
Schließlich ist der Fensterindex Atom w
fördert sein rechtes Argument ‚\ n‘ auf die Zeichenkette „\ n“ und den ersten Index mit einem Teilausgang finden „\ n“ . Dies ergibt 14 .
⁴ḟ€⁴Ṁ
⁴
ist die Konstante 16 . Der Quicklink- Filterfalse each ( ḟ€
) befördert sein linkes Argument 16 in den Bereich [1,…, 16] und durchläuft dann seine Elemente.
Für jedes Element Z , ḟ⁴
ausgeführt wird , zuerst die Förderung z zu [Z] , dann werden alle Entfernen (falls vorhanden) Vorkommen von 16 . Dies ergibt das Array [[1], [2],…, [14], [15], []] , wobei das letzte Array leer ist, weil es 16 enthält .
Schließlich wählt das maximale Atom [15] .Ṁ
mmmmċ
Das modulare Atom, m
das mit den Argumenten x (Array) und y (Integer) aufgerufen wird, nimmt normalerweise alle | y | x- tes Element , beginnend mit dem ersten, wenn y> 0 , mit dem letzten, wenn y <0 . Wenn jedoch y = 0 ist , wird x mit seiner Umkehrung verkettet zurückgegeben.
Das linke ganzzahlige Argument 0 wird zuerst zu [0] heraufgestuft . Die erste Kopie von m
verkettet [0] mit sich selbst und ergibt [0, 0] . Die verbleibenden Kopien wandeln dieses Ergebnis in [0, 0, 0, 0] , dann [0, 0, 0, 0, 0, 0, 0] und schließlich [0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] .
Zuletzt zählt das count- Atom, ċ
wie oft das implizite Argument 0 im resultierenden Array vorkommt, und gibt 16 zurück .
ṭṭṭṭṭṭṭṭḍḄḄḄḄḄḄḄḄḄ
ṭ
ist das Tack- Atom und hängt sein linkes Argument an sein rechtes an. Da ṭ
und die folgenden ḍ
dyadisch sind, müssen alle Aufrufe ṭ
das implizite Argument 0 als das richtige Argument übergeben ṭ
. Der erste Aufruf gibt [0, 0] , der zweite [0, [0, 0] und der achte und letzte [0, [0, [0, [0, [0, [0, [0, [0, 0]]]]]]] .
ḍ
ist das Teilbarkeitsatom ; Für die Argumente x und y wird 1 zurückgegeben. Ist dies nicht der Fall, ist x durch y teilbar und 0 . Ḅ
ist ein No-Op für Ganzzahlen, also ḍḄ
testet 0 auf Teilbarkeit durch jede Ganzzahl im konstruierten Array. 0 ist für sich teilbar, daher erhalten wir [1, [1, [1, [1, [1, [1, [1, [1, 1]]]]]] .
Das unbinäre Atom bearbeitet nunḄ
flache Arrays. Für ein Paar [a, b] wird einfach 2a + b zurückgegeben . Wie bereits erwähnt, Ḅ
ist ein No-Op für ganze Zahlen: Ein ganzzahliges Argument c wird zu [c] heraufgestuft , und [c] in einer beliebigen Basis ist einfach c .
Der erste Aufruf von Ḅ
reduziert [1, 1] auf 3 und ergibt so [1, [1, [1, [1, [1, [1, [1, 3]]]]] . Der nächste Aufruf reduziert [1, 3] auf 5 , der nächste [1, 5] auf 7 usw., bis der neunte 17Ḅ
zurückgibt .
+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ
Ṇ
ist das flache logische NICHT- Atom und ordnet das implizite Argument 0 zu 1 zu . +
Ist das Additionsatom, so +Ṇ
erhöht jede der achtzehn Kopien den vorherigen Rückgabewert (anfangs 0 ). Das gesamte Programm gibt also 18 zurück .
CNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNC
C
ist das Komplementatom und bildet sein Argument z auf 1-z ab . N
ist das Negieren Atom und ordnet ihr Argument z auf -z . Zusammen CN
bildet z zu - (1-z) = z-1 , so dass die achtzehn kopiert das implizite Argument dreht 0 in -18 . Eine endgültige Anwendung der C
Ausbeuten 1 - (-18) = 19
.
ĖḌĖḌ
Das Aufzählen Atom Ė
aufzählt die Elemente in einem Array - Index-Wert - Paare zu schaffen. Das implizite Argument 0 wird zu [0]Ė
heraufgestuft und ergibt dann [[1, 0]] . Das Undezimalatom wandelt ein flaches Array von der Basis 10 in eine Ganzzahl um, was in diesem speziellen Fall [10] ergibt .
Der zweite Aufruf von Ė
transformiert [10] in [[1, 10]] , den der zweite Ḍ
schließlich in [20] umwandelt .
21 - 30
ṫṣȦJṫȦ⁸ȦJ
Der Schwanz Atom ṫ
(a Dyade) Wählen Sie die Postfix seiner linken Argument , das auf dem Index beginnt (1-basiert und modular) in ihrer rechten Argument angegeben, ein linkes Argument ganzzahligen Förderung x zu [x] . Wenn sie mit den beiden Argumenten aufgerufen auf 0 , ṫ
kehrt [0] .
Das any-all- Atom Ȧ
gibt 1 zurück, wenn sein Argument wahr ist und in keiner Tiefe Nullen enthält, andernfalls 0 . Hier verwenden wir es einfach als Identitätsfunktion, um das implizite Argument 0 zurückzugeben . Die Aufteilung in Atome unterteilt ṣ
das linke Argument [0] in Vorkommen des rechten Arguments 0 , sodass hier [[], []] zurückgegeben wird .
Das Atom IndizesJ
verwirft die Elemente des Rückgabewerts und ersetzt sie durch ihre Indizes, was in diesem speziellen Fall den Bereich [1, 2] ergibt . Ȧ
und ṫ
beide funktionieren wie zuvor, so dass sie [1, 2] auf das Postfix reduzieren , das am letzten Index beginnt und [2] ergibt .
In argumentlose Verbindungen, die konstant ⁸
hält [] . Dies ist ein nicht zu analysierender Nilad, dh er passt in keiner Weise in die Kette. Infolgedessen wird der vorherige Rückgabewert ( [2] ) an STDOUT ausgegeben und dann durch den Wert des Nullwerts ( [] ) ersetzt.
Da [] falsch ist, wird Ȧ
es in 0 umgewandelt . Das J
Atom befördert 0 auf [0] und gibt dann die Liste seiner Indizes ( [1] ) zurück, die implizit gedruckt wird, wenn das Programm beendet ist.
22
Noch ein wörtliches Wort. Repdigits scheinen der beste Ort zu sein, um sie zu verwenden.
“@ṃ»
Dies nutzt Jellys eingebaute Saitenkomprimierung. Die Indizes von @ und ṃ in Jellys Codepage sind 64 und 220, und Zeichenfolgenliterale können 250 verschiedene Zeichen enthalten . Daher wird zuerst die Ganzzahl 250 × 65 + 220 = 16470 berechnet .
16470 ist teilbar durch 3, daher codiert der Quotient 16470/3 = 5490 ein druckbares ASCII-Zeichen oder einen Zeilenumbruch. Davon gibt es 96 und 5490 = 96 × 57 + 18 , was bedeutet, dass wir das druckbare ASCII-Zeichen am 0-basierten Index 18 dekodiert haben , der '2' ist .
Wir haben 57 übrig , was auch durch 3 teilbar ist , also codiert der Quotient 57/3 = 19 = 96 × 0 + 19 druckbare ASCII-Zeichen am 0-basierten Index 18 , der '3' ist .
Dies lässt 0 ; Der Dekodierungsvorgang wird gestoppt. Die generierten Zeichen werden zu "23" verkettet
!ḤḤ!
Das faktorielle Atom !
wandelt das implizite Argument 0 in 1 um . Zwei Aufrufe des nicht- halbierten Atoms Ḥ
verwandeln 1 in 2 , dann 2 in 4 . Endlich !
berechnet 4! = 24 .
³HH
In Abwesenheit von Befehlszeilenargumenten, die konstant ³
hält 100 . Zwei Aufrufe der H
Runden 100 in 50 , dann 50 in 25 .
ØaM
Die Konstante Øa
enthält das Kleinbuchstaben. Das maximale Atom M
liefert alle Indizes maximaler Elemente, und da z der größte Kleinbuchstabe ist, ist das Ergebnis [26] .
;;;;;;;;;;;;;;;;;;;;;;;;;;;¬¬ḅ¬
Sechsundzwanzig Kopien des verketteten Atoms ;
verketten den anfänglichen Rückgabewert 0 und sechsundzwanzig Instanzen des Standardarguments 0 und bilden ein Array mit 27 Nullen.
¬
ist das logische NICHT- Atom, also ;¬
hängt eine 1 an das Array von Nullen an. Das nächste ¬
negiert alle Elemente im Array und lässt uns ein Array mit 27 Einsen und 1 Null zurück.
ḅ
ist das Unbase- Atom und konvertiert ein Ziffern-Array von seinem linken Argument von der in seinem rechten Argument angegebenen Basis in eine Ganzzahl. ḅ¬
Konvertiert von Unary zu Integer, führt also einfach eine Summe aus. Für ein Array von 27 gibt dies 27 zurück .
irið8c
Der Index des Atoms i
befördert sein linkes Argument 0 auf [0] und ermittelt dann den Index seines rechten Arguments 0 in diesem Array, was 1 ergibt .
Das Range- Atom r
konstruiert einen aufsteigenden oder absteigenden Bereich vom linken zum rechten Argument. Das richtige Argument ist das implizite Argument 0 , dies ergibt also [1, 0] . Ein zweiter Aufruf von i
findet den Index 0 in [1, 0] und ergibt 2 .
ð
beginnt eine neue dyadische Kette. Da die vorhergehende Kette niladisch war, ist sowohl das linke als auch das rechte Argument dieser Kette gleich dem Rückgabewert der ersten Kette ( 2 ). c
in den Kombinationen Atom. Mit dem linken Argument 8 und dem rechten Argument 2 werden alle eindeutigen, ungeordneten 2-Kombinationen einer Menge von 8 Elementen gezählt, wobei 8C2 = 8! / (6! 2!) = 28 zurückgegeben wird .
⁶ḲĠṂ°İṂĊ
Die Konstante ⁶
enthält ein Leerzeichen und setzt Argument und Rückgabewert auf '' . Das Wort atom Ḳ
befördert das Zeichen '' in die Singleton-Zeichenfolge "" und teilt es in Leerzeichen auf, was [[], []] ergibt .
Die Gruppe Atom Ġ
Gruppen alle Indizes von gleichen Elementen. Da beide Elemente des letzten Rückgabewerts gleich sind, wird hier [[1, 2]] zurückgegeben . Das minimale Atom extrahiert ein minimales (einziges) Element dieses Arrays und liefert [1, 2] .
Der Grad Atom °
wandelt beiden ganzen Zahlen von Sexagesimalgrad in Bogenmaß, wodurch man 1 ° × 2π / 360 ° = π / 180 und 2 ° × 2π / 360 ° = π / 90 . Das inverse Atom nimmt die multiplikativen Inversen auf und ergibt 180 / π ≈ 57.3 und 90 / π ≈ 28.6 .
Dann nimmt Ṃ
noch einmal das Minimum und ergibt 28,6 . Schließlich wird das ceil Atom Ċ
verwandelt 28.6 in 29 .
œṡ¹ẆẆTUṖṖṖṖP
Die Identität Atom ¹
liefert 0 für das implizite Argument 0 . Das um ein Atom aufgeteilteœṡ
Argument befördert beide Argumente (beide 0 ) zu [0] und teilt dann [0] um benachbarte Unterfelder auf, die gleich [0] sind . Dies ergibt [[], []] .
Das Schiebefenster- Atom bildet Ẇ
alle zusammenhängenden Unterfelder seines Arguments. Die erste Instanz transformiert [[], []] in [[[]], [[]], [[], []] , die zweite Instanz transformiert [[[]], [], [] , []]] in
[[[[]]], [[[]]], [[[], []]], [[]], [[]], [[]], [ [], []]], [[]], [[]], [[], []]] .
Die Wahrheit Atom T
listet alle Indizes der truthy Elemente. Keines der Arrays auf der ersten Ebene ist leer, daher ergibt dies [1, 2, 3, 4, 5, 6] . Das Upend- Atom U
kehrt dieses Array um und ergibt [6, 5, 4, 3, 2, 1] .
Vier Kopien des Pop- Atoms Ṗ
entfernen die letzten vier Elemente und lassen uns mit [6, 5] zurück . Schließlich wird das Produkt Atom P
wandelt diese Anordnung in 30 .
31 - 40
ȷ½RṪ
ȷ
ist eine Abkürzung für 1 × 10 3 = 1000 . Die Quadratwurzel Atom ½
ergibt 31,6 , was der Bereich Atom R
verwandelt sich in [1, ..., 31] . Schließlich wird der Schwanz Atom Ṫ
extrahiert das letzte Element, Return 31 .
LµdddddµFL
Die Länge Atom L
fördert das implizite Argument 0 zu [0] , nimmt dann die Länge ergeben 1 . µ
startet eine neue, monadische Kette und das Ergebnis 1 wird zum Argument.
Für die Argumente x und y ergibt das Divmod- Atom [x / y, x% y] . Jeder Aufruf hat y = 1 , das Ergebnis ist also immer [x, 0] .d
Der erste Aufruf beginnt mit x = 1 und ergibt [1, 0] . d
Funktioniert nur mit ganzen Zahlen, wird also in nachfolgenden Aufrufen vektorisiert. Der zweite Aufruf ergibt [[1, 0], [0, 0]] , der dritte [[[1, 0], [0, 0]], [[0, 0], [0, 0]] , und die fünfte und letzte ein Array der Tiefe 5, das eine einzelne Eins und 31 Nullen enthält.
µ
startet erneut eine neue, monadische Kette, und das Array von zuvor wird zu seinem Argument. Das flache Atom F
entzweit dieses Array und ergibt ein flaches Array aus einer einzelnen Eins und 31 Nullen. Nimmt schließlich L
die Länge des resultierenden, zurückgegebenen 32 .
33
Noch ein Neudigit, noch ein Literal.
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWŒḊ
Jede Instanz des Wrap- Atoms transformiert sein Argument z in [z] . Mit dem anfänglichen Rückgabewert 0 ergeben alle 34 Instanzen zusammen [[[[[[[[[[[[[[[[[[[]]]] ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] . Schließlich ist die Tiefen Atom ŒḊ
berechnet die maximale Tiefe der resultierenden Anordnung, Return 34 .
ẇɓæ«æ«æ«æ«æ«|æ«|
Das Fenster existiert Atom ẇ
befördert beide Argumente (beide standardmäßig auf 0 ) auf [0] und testet dann, ob ** [0] ** als zusammenhängendes Subarray von [0] auftritt . Er tut, so ẇ
gibt 1 .
ɓ
beginnt eine neue dyadische Kette. Da die vorhergehende Kette niladisch war, ist sowohl das linke als auch das rechte Argument dieser Kette gleich dem Rückgabewert der ersten Kette ( 1 ). Die Kette verwendet zwei verschiedene dyadische Atome: Bitverschiebung nach links ( æ«
) und bitweises ODER ( |
).
Eine dyadische Kette, die mit drei oder mehr Dyaden beginnt, nennt zunächst die erste Dyade mit den Argumenten der Kette. Hier ergibt sich 1 << 1 = 2 . Die sechs nachfolgenden Dyaden werden in Paare (sogenannte Gabeln ) gruppiert , wobei die Dyade ganz rechts zuerst mit den Argumenten der Kette und die ganz linke mit den vorherigen Rückgabewerten zu beiden Seiten aufgerufen wird.
Für erhalten æ«æ«
wir 2 << (1 << 1) = 2 << 2 = 8 . Dann æ«æ«
berechnet 8 << (1 << 1) = 8 << 2 = 32 . Jetzt |æ«
bekommt uns 32 | (1 << 1) = 32 | 2 = 34 .
Schließlich verhält sich der Trailing |
wie ein Hook und wird mit dem vorherigen Rückgabewert als linkem und dem rechten Argument der Kette als rechtem Argument aufgerufen. Dies ergibt 34 | 1 = 35 .
⁹ṚḢ²
In Abwesenheit eines zweiten Arguments, die konstant ⁹
hält 256 . Das umgekehrte Atom fördert 256 auf das Array [2, 5, 6] und kehrt es zu ergeben [6, 5, 2] . Dann wird das Kopfatom extrahiert das erste Element und die quadratischen Atome kehren ** 6² = 36 *.Ḣ
²
‘‘‘0‘‘‘‘‘‘‘
Das Inkrement- Atom ‘
inkrementiert sein Argument um 1 , also setzen Sie ‘‘‘
den anfänglichen Rückgabewert 0 auf 3 . Die folgende 0 ist eine nicht analysierbare Null, dh sie passt in keiner Weise in die Kette. Infolgedessen wird der vorherige Rückgabewert ( 3 ) an STDOUT ausgegeben und dann durch den Wert ( 0 ) des Nulladers ersetzt .
Die folgenden 7 Kopien von ‘
wandeln diese 0 in 7 um , die implizit gedruckt werden, wenn das Programm beendet ist.
’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ạ
Das Dekrement- Atom ’
dekrementiert sein Argument um 1 , sodass 38 Kopien den anfänglichen Rückgabewert 0 in -38 umwandeln . Die absolute Differenz Atome ạ
berechnet die unsigned Differenz zwischen -38 und dem impliziten Argumente 0 , Return 38 .
-____---__________
-
ist eine Abkürzung für -1 und setzt das Argument und den Rückgabewert des Links auf -1 . Jedes _
ist eine Instanz des dyadischen Subtraktionsatoms , dessen rechtes Argument bei Fehlen standardmäßig -1 ist.
Zuerst -____-
berechnet (-1) - (-1) - (-1) - (-1) - (-1) = 3 . Das folgende -1 ist ein nicht analysierbarer Nullwert, daher wird der vorherige Rückgabewert ( 3 ) an STDOUT ausgegeben und dann durch den Nullwert ( -1 ) ersetzt.
Als nächstes wird (-1) - (-1) = 0-_
berechnet , wobei das Literal das linke Argument von setzt und den Rückgabewert als das rechte verwendet. Die folgenden neun Kopien von subtrahieren das Standardargument -1 vom Rückgabewert und ergeben 9 , was implizit gedruckt wird, wenn das Programm beendet ist.-
_
_
”(O
”(
ist ein Zeichenliteral und das Ordnungsatom sieht seinen Unicode - Codepunkt, wodurch man bis 40 .O
41 - 47
⁵ḶxḶ⁵ị⁵ḶxḶḣṢ
In Abwesenheit eines dritten Befehlszeilenarguments hat die Konstante den ⁵
Wert 10 . Das unlange Atom Ḷ
erzeugt einen 0-basierten Bereich, speziell [0,…, 9] für Argument 10 , zu beiden Seiten des Repeat-in-Place- Atoms x
. Letzterer vergleicht Elemente seines linken Arguments mit Wiederholungen seines rechten Arguments und wiederholt jedes der Elemente entsprechend oft. Mit [0,…, 9] als linkes und rechtes Argument erhalten wir somit null Nullen, eine Eins, zwei Zweien usw.
Der Index in atom ị
ruft das Element seines rechten Arguments an dem in seinem linken angegebenen Index ab. Mit dem linken Argument 10 ( ⁵
links davon) und dem rechten Argument [1, 2, 2, 3, 3, 4, 4, 4, 4,…, 9] (vorheriges Ergebnis) ergibt sich 4 .
Auf die Kette bis zu diesem Punkt folgt ein nicht analysierbarer Nullwert ⁵
, sodass der vorherige Rückgabewert ( 4 ) auf STDOUT gedruckt wird, der Rückgabewert auf 10 gesetzt wird und der Rest der Kette wie gewohnt analysiert wird.
Wie zuvor ⁵ḶxḶ
ergibt sich das Array [1, 2, 2, 3, 3, 3, 4, 4, 4, 4,…, 9] . Dieses Mal nennen wir das sortierte Atom Ṣ
für das Argument 10 , das 10 zu [1, 0] befördert , und sortieren es dann, um [0, 1] zu ergeben . Das dyadische Kopfatom ruft nun die Präfixe der Längen 0 und 1 aus dem Ergebnis auf der linken Seite ab und lässt uns [[], [1]] zurück . Beim Drucken bleibt nur 1 sichtbar.
⁽{ʂ%⁽{}
⁽
und die beiden folgenden Zeichen bilden ein numerisches Literal. Wenn j und k ihre Codepunkte in Jellys Codepage und (j, k) <(124, 250) sind , erhalten wir die Ganzzahl 1001 + 250j + k . Die Codepunkte von '{' , '}' und 'ʂ' sind 123 , 125 und 167 , sodass das linke Literal 1001 + 250 × 123 + 167 (= 31918) ergibt , während das rechte 1001 + ergibt 250 × 123 + 125 (= 31876) .
Da die linke Ganzzahl weniger als doppelt so groß ist wie die rechte, ist das Ergebnis (… + 167)% (… + 125) = (… + 167) - (… + 125) = 167–125 = 42 .
ẊẠżv©żvżvżvọ®®Ạżvżvżvọ®
Das Shuffle- Atom Ẋ
ordnet die Elemente seines Arguments zufällig an. Ein numerisches Argument z wird zuvor in den Bereich [1,…, z] befördert . Für das implizite Argument 0 ist dieser Bereich leer und Ẋ
ergibt [] . Das all- Atom Ạ
gibt 1 zurück, wenn alle Elemente seines Arguments wahr sind, andernfalls 0 . Da ein leeres Array nicht falsy Elemente enthält, Ạ
gibt 1 hier.
Der Zip mit Atom ż
(eine Dyade) nimmt die Argumente x und y und transponiert das Paar [x, y] . Für Ganzzahlen x und y ergibt dies einfach [[x, y]] , und dieses spezielle ż
Argument, das mit den Argumenten 1 und 0 (dem impliziten Argument) aufgerufen wird , gibt [[1, 0]] zurück . Das dyadische Eval- Atom v
wandelt alle flachen Arrays (die nur Zahlen und Zeichen enthalten) im linken Argument in Zeichenfolgen um und wertet die resultierenden Zeichenfolgen als monadische Jelly-Programme aus, wobei das rechte Argument als Argument der Programme gilt. Seit ["10"]Besteht nur aus Literalen, ignoriert dies das richtige Argument v
und führt einfach zu [10] .
Die Kopie schnell ©
Attaches an v
und kopiert das Ergebnis in das Register. Später Vorkommen des Rückruf - Atom ®
(a nilad) werden fetch [10] aus dem Register.
Die nächsten drei Kopien der żv
Arbeit wie zuvor, Zuordnung von [10] zu [10, 0] zu [100] zu… zu [10000] . Die Reihenfolge Atom ọ
Tests wie oft sein linkes Argument durch seine rechten teilbar ist, so ist hier, berechnet sie die Reihenfolge von 10 (mit geholten ®
) in 10000 = 10 4 , wodurch man [4] .
Das Folgende ®
ist ein nicht analysierbarer Nullwert, daher wird der vorherige Rückgabewert ( [4] ) an STDOUT ausgegeben und dann durch den Nullwert ( 10 ) ersetzt. Wir bewerben uns als Ạ
nächstes und ergeben 1 . (Dies ist erforderlich, da an dieser Stelle eine Null gefolgt von einer Dyade analysiert werden kann.)
żvżvżv
Hängt wie zuvor drei Nullen an den aktuellen Rückgabewert an und verwandelt 1 in [1000] . Schließlich ọ®
berechnet die Größenordnung von 10 in 1000 = 10 3 , und 3 ist an stdout ausgegeben , wenn das Programm beendet ist .
44
Noch ein Neudigit, noch ein Literal.
111111l11&K1111111Kl11&
In erster Linie setzt das Literal 111111
das Argument und den anfänglichen Rückgabewert auf 111111 . Die anderen Läufe von 1
sind ebenfalls Literale.
l
ist das Logarithmusatom , das den Logarithmus seines linken Arguments mit der in der rechten angegebenen Basis berechnet. Wenn 111111 mit dem rechten Argument 11 aufgerufen wird , erhalten wir log 11 111111 ≈ 4.85 .
Das Wort atom K
wird nach dem Heraufstufen einer Ziffer / eines Zeichens z zu [z] an Leerzeichen mit einem Listenargument verbunden . Hier verwenden wir es einfach, um das Argument 111111 des Links in [111111] umzuwandeln . (Hier ist kein Array erforderlich, aber es sind keine Identitätsatome mehr vorhanden.) Das bitweise UND- Atom &
nimmt die Rückgabewerte auf beide Seiten, wandelt sie bei Bedarf in eine Ganzzahl um und berechnet ihr bitweises UND. In diesem speziellen Fall wird [4.85 & 111111] = [4 & 111111] = [4] zurückgegeben .
Das Folgende 1111111
ist ein nicht analysierbarer Nullwert, daher wird der vorherige Rückgabewert ( [4] ) an STDOUT ausgegeben und dann durch den Wert des Nullwerts ( 1111111 ) ersetzt. K
verwandelt diese ganze Zahl dann in [1111111] . (Dies ist wiederum nicht wirklich erforderlich, aber eine Null gefolgt von einer Dyade wäre an dieser Stelle analysierbar.)
Wie zuvor l11
berechnet log 11 1111111 ≈ 5.81 , dann &
kehrt [5,81 & 111111] = [5 & 111111] = [5] .
,SS
ỊỊ,ÇS
ÇÑÇÇÇÑ
Dies ist das einzige Programm, das aus mehreren benutzerdefinierten Links besteht. Der letzte Link ist der Hauptlink und wird beim Start des Programms ausgeführt, die restlichen Links sind Hilfslinks. Das Quick Ç
verweist immer auf den Link über dem aktuellen und führt ihn monadisch aus. Ebenso Ñ
bezieht sich der Quick immer auf den Link unter dem aktuellen (Wrapping Around) und führt ihn auch monadisch aus.
Der Oberlenker besteht aus dem Paar Atom ,
- eine Dyade , die Argumente schaltet sich x und y in [x, y] - und die Summe Atom S
- ein monadisch, der ein Integer - Argument fördert z zu [z] und reduziert ein Array Argument durch Zusatz. Wenn der Link ,SS
mit einem ganzzahligen Argument n aufgerufen wird , berechnet er Σ [n, Σn] = Σ [n, n] = 2n .
Das mittlere Glied besteht aus den oben genannten Atomen, dem oben genannten schnellen Ç
und dem unbedeutenden Atom Ị
- eine Monade, die 1 für numerische Argumente z mit -1 ≤ z ≤ 1 , aber 0 für alle anderen ergibt . Wenn Sie Ị
ein ganzzahliges Argument n zweimal anwenden, wird es im Wesentlichen durch 1 ersetzt , da die Ausgabe des ersten Ị
(die Eingabe des zweiten) immer unbedeutend ist. Dieses Ergebnis wird dann mit dem Rückgabewert von Ç
(mit dem Argument n aufgerufen ) gepaart und das resultierende Paar wird um reduziert S
. Insgesamt berechnen wirΣ [(| n | ≤ 1) ≤ 1, 2n] = Σ [1, 2n] = 2n + 1 .
Mit diesen beiden Hilfsverknüpfungen kann die Hauptverknüpfung jetzt eine beliebige nicht negative Ganzzahl erstellen, indem sie ihre Binärziffern betrachtet. Bei einem anfänglichen Rückgabewert von 0ÇÑÇÇÇÑ
berechnet die Kette das Endergebnis (((((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
Das nächste Primatom findet die kleinste positive Primzahl, die strikt größer als sein Argument ist. Mit dem anfänglichen Rückgabewert 0Æn
berechnen fünfzehn Aufrufe die fünfzehnte Primzahl, also 47 .