Gelatina , 47 numeri interi, 519 byte
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
Ogni riga è un programma separato e completo.
Provalo online! (include suite di test e controllo intersezioni)
Come funziona
Ogni programma completo senza argomenti della riga di comando esegue il suo collegamento principale (definito sull'ultima riga) in modo niladico, ovvero senza input. Se il primo collegamento nella catena è un nilad, viene consumato, chiamato e sia l'argomento del collegamento principale che il valore restituito vengono impostati sul risultato; se il primo anello della catena è una monade o una diade, non viene consumato e viene invece utilizzato l'argomento implicito e il valore restituito 0 . In entrambi i casi, il resto della catena viene eseguito monadicamente.
Jelly manipola la sua produzione in diversi casi. In particolare, un array singleton viene stampato senza le parentesi circostanti, quindi 42 e [42] e indistinguibile dopo la stampa. Lo useremo in diverse occasioni.
1 - 10
e
L' atomo esistente verifica se il valore restituito 0 appartiene all'argomento 0 . Lo fa, quindi e
restituisce 1 .
BI$⁼#
BI$
è un collegamento rapido, in particolare una catena monadica formata dal $
raggruppamento rapido dell'atomo binarioB
e dell'atomo di incrementiI
. Combinati, convertono un numero intero nella matrice delle sue cifre nella base 2, quindi calcolano le differenze in avanti delle cifre risultanti. Se l'array ha un solo elemento, non ci sono differenze in avanti e I
restituisce un array vuoto (falsy); se ci sono almeno due cifre, I
restituisce un array non vuoto (verità).
Il rapido #
consuma il collegamento rapido precedente e lo applica a 0 , 1, 2, ... fino a quando non vengono trovate abbastanza corrispondenze e restituisce la matrice di corrispondenze. L'importo richiesto viene calcolato da ⁼
, che confronta il valore di ritorno / argomento 0 con se stesso, ottenendo 1 . Pertanto, l'intero programma restituisce [2] , il primo intero non negativo con due cifre in base 2.
⁾⁾⁾Ụ^/
⁾⁾⁾
è una stringa letterale, in particolare la stringa ⁾⁾ . L' atomo di grado superioreỤ
ordina i suoi indici in base ai loro valori corrispondenti; poiché entrambi i caratteri sono uguali, si ottiene [1, 2] . L'array risultante viene ridotto con XOR bit a bit ^/
, quindi l'intero programma restituisce 3 .
ı***ıḞḞ
ı
inizializza l'argomento e restituisce valore all'unità immaginaria i . *
è la diade di esponenziazione , il cui argomento corretto viene impostato per default sull'argomento del collegamento principale. Quindi, ***ı
calcola ((i i ) i ) i ≈ 4.81 + 0i , l' Ḟ
atomo ( piano per argomenti reali , parte reale per argomenti complessi) calcola la parte reale ( 4.81 ), quindi Ḟ
piani, producendo 4 .
5
6
7
Questi tre programmi consistono in un unico letterale e fanno esattamente quello che ti aspetteresti.
.::::
Il valore letterale .
è una scorciatoia per 0,5 e inizializza argomento e valore di ritorno. L' argomento destro della divisione intera della diade ( :
) viene impostato automaticamente sull'argomento dei collegamenti principali, quindi ::::
calcola 0,5 / 0,5 / 0,5 / 0,5 / 0,5 , producendo 8 .
9
Un altro letterale.
EȮ<
L' atomo tutto ugualeE
restituisce 1 se tutti gli elementi nel suo argomento sono uguali e 0 in caso contrario. Un argomento intero z viene promosso a [z] , quindi E
restituirà 1 per l'argomento implicito 0 .
Ora, l' atomo di outputȮ
stampa 1 su STDOUT. Confrontiamo quindi 1 con l'argomento implicito 0 utilizzando l' atomo minore di<
. Il risultato è (1 <0) = 0 e viene stampato implicitamente al termine del programma.
11 - 20
⁻GṘ
L' atomo della grigliaG
cerca di creare una tabella visivamente piacevole dal suo argomento. Per un semplice argomento intero (qui: 0 ), lo avvolge semplicemente in un array. L' atomo piatto non uguale⁻
confronta l'argomento implicito 0 con il risultato a destra ( [0] ), producendo 1 poiché i suoi argomenti non sono uguali. L' atomo di rappresentazioneṘ
stampa 1 su STDOUT e restituisce il suo risultato. Alla fine del programma, il valore di ritorno finale viene stampato implicitamente, quindi finiamo con un output di 11 .
=`p`VV×`DQV
L' auto veloce `
trasforma una diade in una monade chiamandola con argomenti identici a destra e sinistra. Innanzitutto, =`
confronta l'argomento implicito 0 con se stesso, producendo 1 .
L' atomo del prodotto cartesianop
prevede elenchi come argomenti, quindi promuove l'intero 1 nell'intervallo [1,…, 1] = [1] . p`
prende il prodotto cartesiano di [1] e di se stesso, producendo [[1, 1]] .
L' atomo evalV
trasforma tutte le matrici piatte (contenenti solo numeri e caratteri) in stringhe, quindi valuta le stringhe risultanti come programmi jelly niladici. [[1, 1]] viene prima trasformato in [“11”] , quindi V
elimina la stringa, producendo [11] . Ancora una volta, V
trasforma questo array in "11" , quindi lo elimina per ottenere 11 .
Ora, ×`
moltiplica 11 con se stesso, producendo 121 . L' atomo decimale trasforma 121 in [1, 2, 1] , l' atomo univocoQ
scarta il secondo 1 e V
ancora una volta trasforma un elenco di cifre nell'intero che risulta dalla loro concatenazione, restituendo 12 .
~A~A~A~A~A~A~A~A~A~A~A~A~A
~
è l' atomo NON bit a bit . Con l'aritmetica del complemento a due, associa un argomento da z a ~ z = - (z + 1) . A
è l' atomo del valore assoluto , quindi mappa - (z + 1) = z + 1 . Con il valore di ritorno iniziale 0 , le tredici copie del ~A
reso 13 .
⁷ṾṾṾw
La costante ⁷
contiene il carattere di nuova riga '\ n' e inizializza l'argomento e restituisce il valore.
L' atomo irregolareṾ
tenta di creare una rappresentazione in forma di stringa del suo argomento z in modo tale che un programma Jelly costituito da questo codice restituisca z .
La prima chiamata restituisce doverosamente la stringa "" \ n " , che è un carattere letterale. La chiamata successiva restituisce "" ”,” \ n " - una coppia di caratteri letterali. La terza e ultima chiamata restituisce "” ”,” ”,” ,, ””, ”\ n" - un quintuplo di caratteri letterali.
Infine, l' atomo di indice di finestraw
promuove il suo argomento corretto '\ n' alla stringa "\ n" e trova il primo indice di una sottostringa che inizia con "\ n" . Questo restituisce 14 .
⁴ḟ€⁴Ṁ
⁴
è la costante 16 . Il filtro quicklinkse each ( ḟ€
) promuove il suo argomento sinistro 16 nell'intervallo [1, ..., 16] , quindi scorre i suoi elementi.
Per ogni elemento z , ḟ⁴
viene eseguito, promuovendo prima z in [z] , quindi rimuovendo tutte le occorrenze (se presenti) di 16 . Questo produce l'array [[1], [2],…, [14], [15], []] , dove l'ultimo array è vuoto perché conteneva 16 .
Infine, l' atomo massimoṀ
seleziona [15] .
mmmmċ
L' atomo modularem
- chiamato con argomenti x (array) e y (intero) di solito prende ogni | y | th elemento di x , a partire dal primo se y> 0 , con l'ultimo se y <0 . Tuttavia, quando y = 0 , restituisce x concatenato con il suo contrario.
L'argomento intero sinistro 0 viene prima promosso a [0] . La prima copia di m
concatena [0] con se stessa, producendo [0, 0] . Le copie rimanenti trasformano questo risultato in [0, 0, 0, 0] , quindi [0, 0, 0, 0, 0, 0, 0, 0] e infine [0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] .
Alla fine, l' atomo di conteggioċ
conta il numero di volte in cui l'argomento implicito 0 appare nella matrice risultante, restituendo 16 .
ṭṭṭṭṭṭṭṭḍḄḄḄḄḄḄḄḄḄ
ṭ
è l' atomo di virata e aggiunge il suo argomento di sinistra a quello di destra. Poiché ṭ
e quanto segue ḍ
sono diadici, tutte le chiamate per ṭ
passare l'argomento implicito 0 come argomento giusto a ṭ
. La prima chiamata restituisce [0, 0] , la seconda [0, [0, 0] e l'ottava e l'ultima [0, [0, [0, [0, [0, [0, [0, [0, 0]]]]]]]] .
ḍ
è l' atomo di divisibilità ; Per gli argomenti x e y , restituisce 1 è x è divisibile per y , 0 in caso contrario. Ḅ
è un no-op per numeri interi, quindi ḍḄ
verifica 0 per divisibilità per ogni numero intero nella matrice costruita. 0 è divisibile per se stesso, quindi otteniamo [1, [1, [1, [1, [1, [1, [1, [1, 1]]]]]]]] .
Ora, il unbinary atomo Ḅ
opera su matrici piane. Per una coppia [a, b] , restituisce semplicemente 2a + b . Come accennato in precedenza, Ḅ
è un no-op per numeri interi: un argomento intero c viene promosso a [c] e [c] in qualsiasi base è semplicemente c .
La prima chiamata a Ḅ
riduce [1, 1] a 3 , dando così [1, [1, [1, [1, [1, [1, [1, 3]]]]]]] . La chiamata successiva riduce [1, 3] a 5 , la successiva [1, 5] a 7 e così via fino a quando la nona Ḅ
restituisce 17 .
+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ
Ṇ
è l' atomo NOT logico piatto e mappa l'argomento implicito da 0 a 1 . +
è l'atomo di addizione, quindi ciascuna delle diciotto copie di +Ṇ
incrementa il valore di ritorno precedente (inizialmente 0 ). L'intero programma restituisce quindi 18 .
CNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNC
C
è l' atomo del complemento e mappa l'argomento da z a 1-z . N
è l' atomo negativo e mappa il suo argomento da z a -z . Insieme, CN
mappa z su - (1-z) = z-1 , quindi le diciotto copie trasformano l'argomento implicito 0 in -18 . Un'applicazione finale dei C
rendimenti 1 - (-18) = 19
.
ĖḌĖḌ
L'enumerate atomo Ė
enumera gli elementi in un array, creando coppie indice di valore. L'argomento implicito 0 viene promosso a [0] , quindi Ė
restituisce [[1, 0]] . L' atomo undecimale converte una matrice piatta dalla base 10 all'intero, producendo [10] in questo caso particolare.
La seconda chiamata per Ė
trasformare [10] in [[1, 10]] , che la seconda Ḍ
trasforma infine in [20] .
21-30
ṫṣȦJṫȦ⁸ȦJ
L' atomo di codaṫ
(una diade) seleziona il postfisso del suo argomento sinistro che inizia dall'indice (basato su 1 e modulare) specificato nel suo argomento destro, promuovendo un argomento intero sinistro da x a [x] . Quando viene chiamato con entrambi gli argomenti impostati su 0 , ṫ
restituisce [0] .
L' atomo any e allȦ
restituisce 1 se il suo argomento è veritiero e non contiene zero a nessuna profondità, 0 altrimenti. Qui, lo usiamo semplicemente come una funzione di identità per restituire l'argomento implicito 0 . La divisione atomo ṣ
suddivide l'argomento sinistro [0] in occorrenze dell'argomento destro 0 , quindi restituisce [[], []] qui.
L' atomo di indiciJ
scarta gli elementi del valore di ritorno e li sostituisce con i loro indici, producendo l'intervallo [1, 2] in questo caso specifico. Ȧ
ed ṫ
entrambi funzionano come prima, quindi riducono [1, 2] al postfisso che inizia all'ultimo indice, producendo [2] .
Nei collegamenti niladici, la costante ⁸
contiene [] . Questo è un nilad non analizzabile, cioè non si adatta alla catena in alcun modo. Di conseguenza, il valore di ritorno precedente ( [2] ) viene stampato su STDOUT, quindi sostituito con il valore di nilad ( [] ).
Poiché [] è falso, lo Ȧ
trasforma in 0 . L' J
atomo promuove 0 su [0] , quindi restituisce l'elenco dei suoi indici ( [1] ), che viene stampato implicitamente al termine del programma.
22
Un altro letterale. I rimpiazzi sembrano essere il posto migliore per usarli.
“@ṃ»
Questo utilizza la compressione delle stringhe integrata di Jelly. Gli indici di @ e ṃ nella codepage di Jelly sono 64 e 220 e i letterali di stringa possono contenere 250 caratteri diversi, quindi questo prima calcola l'intero 250 × 65 + 220 = 16470 .
16470 è divisibile per 3, quindi il quoziente 16470/3 = 5490 codifica un carattere ASCII stampabile o un avanzamento di riga. Ce ne sono 96 e 5490 = 96 × 57 + 18 , il che significa che abbiamo decodificato il carattere ASCII stampabile nell'indice 18 basato su 0 , che è '2' .
Siamo lasciati con 57 , che è anche divisibile per 3 , quindi il quoziente 57/3 = 19 = 96 × 0 + 19 codifica caratteri ASCII stampabili in corrispondenza dell'indice 0 a base 18 , che è '3' .
Questo lascia 0 ; il processo di decodifica si interrompe. I caratteri generati vengono concatenati per formare "23"
!ḤḤ!
L' atomo fattoriale!
trasforma l'argomento implicito 0 in 1 . Due invocazioni dell'atomo unhalveḤ
trasformano 1 in 2 , quindi 2 in 4 . Infine, !
calcola 4! = 24 .
³HH
In assenza di argomenti della riga di comando, la costante ³
contiene 100 . Due invocazioni delle H
curve 100 in 50 , quindi 50 in 25 .
ØaM
La costante Øa
contiene l'alfabeto minuscolo. L' atomo massimoM
produce tutti gli indici degli elementi massimi e poiché z è la più grande lettera minuscola, il risultato è [26] .
;;;;;;;;;;;;;;;;;;;;;;;;;;;¬¬ḅ¬
Ventisei copie del concatenate dell'atomo ;
concatenare il valore di ritorno iniziale di 0 e ventisei le istanze del argomento di default 0 , la costruzione di una serie di 27 zeri.
¬
è l' atomo NOT logico , quindi ;¬
aggiunge un 1 alla matrice di zero. Il successivo ¬
annulla tutti gli elementi dell'array, lasciandoci con un array di 27 e 1 zero.
ḅ
è l' atomo unbase e converte un array di cifre dall'argomento sinistro dalla base specificata nell'argomento destro in intero. ḅ¬
converte da unario a intero, quindi esegue semplicemente una somma. Per un array di 27, questo restituisce 27 .
irið8c
L' indice di atomo i
promuove l'argomento sinistro da 0 a [0] , quindi trova l'indice dell'argomento destro 0 in quell'array, ottenendo 1 .
L' atomo di intervallor
costruisce un intervallo crescente o decrescente dal suo argomento di sinistra a quello di destra. L'argomento giusto è l'argomento implicito 0 , quindi questo produce [1, 0] . Una seconda invocazione di i
trova l'indice 0 in [1, 0] , producendo 2 .
ð
inizia una nuova catena diadica. Poiché la catena precedente era niladica, l'argomento destro e sinistro di questa catena sarà uguale al valore di ritorno della prima catena ( 2 ). c
nelle combinazioni atom. Con l'argomento sinistro 8 e l'argomento destro 2 , conta tutte le 2 combinazioni uniche e non ordinate di un insieme di 8 elementi, restituendo 8C2 = 8! / (6! 2!) = 28 .
⁶ḲĠṂ°İṂĊ
La costante ⁶
contiene un carattere spazio e imposta argomento e restituisce valore a "" . Le parole atom Ḳ
promuovono il carattere '' nella stringa singleton "" e lo dividono in spazi, producendo [[], []] .
L' atomo del gruppoĠ
raggruppa tutti gli indici di elementi uguali. Poiché entrambi gli elementi dell'ultimo valore restituito sono uguali, restituisce [[1, 2]] qui. L' atomo minimo estrae un minimo (unico) elemento di questo array, producendo [1, 2] .
L' atomo di grado°
converte entrambi i numeri interi da gradi sessagesimali a radianti, producendo 1 ° × 2π / 360 ° = π / 180 e 2 ° × 2π / 360 ° = π / 90 . L' atomo inverso prende le inversioni moltiplicative, producendo 180 / π ≈ 57,3 e 90 / π ≈ 28,6 .
Quindi, Ṃ
ancora una volta prende il minimo, producendo 28,6 . Infine, l' atomo di ceilĊ
trasforma 28,6 in 29 .
œṡ¹ẆẆTUṖṖṖṖP
L' atomo di identità¹
restituisce 0 per l'argomento implicito 0 . La suddivisione attorno all'atomo œṡ
promuove entrambi i suoi argomenti (entrambi 0 ) su [0] , quindi suddivide [0] attorno a sottoquarti contigui pari a [0] . Questo produce [[], []] .
L' atomo di finestra scorrevoleẆ
crea tutti i contrapposti contigui del suo argomento. La prima istanza trasforma [[], []] in [[[]], [[]], [[], []]] , la seconda istanza trasforma [[[]], [[]], [[] , []]] in
[[[[]]], [[[]]], [[[], []]], [[[]], [[]]], [[[]], [ [], []]], [[[]], [[]], [[], []]]] .
L' atomo di veritàT
elenca tutti gli indici degli elementi di verità. Nessuno degli array al primo livello è vuoto, quindi questo produce [1, 2, 3, 4, 5, 6] . L' atomo upendU
inverte questo array, producendo [6, 5, 4, 3, 2, 1] .
Quattro copie dell'atomo popṖ
rimuovono gli ultimi quattro elementi, lasciandoci con [6, 5] . Infine, l' atomo del prodottoP
trasforma questo array in 30 .
31 - 40
ȷ½RṪ
ȷ
è una scorciatoia per 1 × 10 3 = 1000 . L' atomo della radice quadrata½
produce 31,6 , che l' atomo della gammaR
trasforma in [1,…, 31] . Infine, l' atomo di codaṪ
estrae l'ultimo elemento, restituendo 31 .
LµdddddµFL
L' atomo lunghezzaL
promuove l'argomento implicito da 0 a [0] , quindi impiega la lunghezza per produrre 1 . µ
avvia una nuova catena monadica e il risultato 1 diventa il suo argomento.
Per gli argomenti x e y , i divmod atomo d
rese [x / y, x% y] . Ogni chiamata avrà y = 1 , quindi il risultato sarà sempre [x, 0] .
La prima chiamata inizia con x = 1 , producendo [1, 0] . d
opera solo su numeri interi, quindi vettorializza nelle chiamate successive. La seconda chiamata produce [[1, 0], [0, 0]] , la terza [[[1, 0], [0, 0]], [[0, 0], [0, 0]]] , e il quinto e ultimo un array di profondità 5 che contiene un singolo e 31 zero.
µ
ancora una volta inizia una nuova catena monadica e l'array di prima diventa il suo argomento. L' atomo piattoF
annulla questa matrice, producendo una matrice piatta di uno singolo e 31 zero. Infine, L
prende la lunghezza del risultato, restituendo 32 .
33
Un altro rimedio, un altro letterale.
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWŒḊ
Ogni istanza dell'atomo di avvolgimento trasforma il suo argomento z in [z] . Con il valore di ritorno iniziale di 0 , tutte e 34 le istanze insieme producono [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] . Infine, l' atomo di profonditàŒḊ
calcola la profondità massima dell'array risultante, restituendo 34 .
ẇɓæ«æ«æ«æ«æ«|æ«|
La finestra esiste atom ẇ
promuove entrambi i suoi argomenti (entrambi predefiniti su 0 ) su [0] , quindi verifica se ** [0] ** si presenta come un sottoarray contiguo di [0] . Lo fa, quindi ẇ
restituisce 1 .
ɓ
inizia una nuova catena diadica. Poiché la catena precedente era niladica, l'argomento destro e sinistro di questa catena sarà uguale al valore di ritorno della prima catena ( 1 ). La catena utilizza due diversi atomi diadici: bitshift left ( æ«
) e bitwise OR ( |
).
Una catena diadica che inizia con tre o più diade inizialmente chiama la prima diade con gli argomenti della catena. Qui, questo dà 1 << 1 = 2 . Le sei diadi successive sono raggruppate in coppie (le cosiddette forcelle ), dove la diade più a destra viene chiamata prima con gli argomenti della catena, quindi quella più a sinistra viene chiamata con i precedenti valori di ritorno su entrambi i lati.
Per æ«æ«
, otteniamo 2 << (1 << 1) = 2 << 2 = 8 . Quindi, æ«æ«
calcola 8 << (1 << 1) = 8 << 2 = 32 . Ora, |æ«
ci ottiene 32 | (1 << 1) = 32 | 2 = 34 .
Infine, il trailing si |
comporta come un hook e viene chiamato con il valore di ritorno precedente come argomento di sinistra e l'argomento di destra della catena come di destra. Ciò restituisce 34 | 1 = 35 .
⁹ṚḢ²
In assenza di un secondo argomento, la costante ⁹
contiene 256 . L' atomo inverso promuove 256 nell'array [2, 5, 6] e lo inverte per produrre [6, 5, 2] . Quindi, l' atomo capoḢ
estrae il primo elemento e l' atomo quadrato²
restituisce ** 6² = 36 *.
‘‘‘0‘‘‘‘‘‘‘
L' incremento atomo ‘
incrementa sua tesi da 1 , quindi ‘‘‘
ruotare il valore restituito iniziale 0 in 3 . Il seguente 0 è un nilad non analizzabile, cioè non si adatta in alcun modo alla catena. Di conseguenza, il valore di ritorno precedente ( 3 ) viene stampato su STDOUT, quindi sostituito con il valore di nilad ( 0 ).
Le seguenti 7 copie ‘
trasformano questo 0 in 7 , che viene stampato implicitamente al termine del programma.
’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ạ
Il decremento atomo ’
decrementa sua tesi da 1 , così trentotto copie ruotare il valore iniziale di ritorno 0 in -38 . L' atomo della differenza assolutaạ
calcola la differenza senza segno tra -38 e l'argomento implicito 0 , restituendo 38 .
-____---__________
-
è una scorciatoia per -1 e imposta l'argomento del collegamento e restituisce il valore a -1 . Ognuna _
è un'istanza dell'atomo di sottrazione diadica , il cui argomento destro verrà impostato a -1 se mancante.
Innanzitutto, -____-
calcola (-1) - (-1) - (-1) - (-1) - (-1) = 3 . Il seguente -1 è un nilad non analizzabile, quindi il valore di ritorno precedente ( 3 ) viene stampato su STDOUT, quindi sostituito con il valore del nilad ( -1 ).
Quindi, -_
calcola (-1) - (-1) = 0 , dove il valore letterale -
imposta l' argomento sinistro di _
e utilizza il valore restituito come quello giusto. Le seguenti nove copie _
sottraggono l'argomento predefinito -1 dal valore restituito, producendo 9 , che viene stampato implicitamente al termine del programma.
”(O
”(
è un carattere letterale e l' atomo ordinaleO
cerca il suo punto di codice Unicode, producendo 40 .
41 - 47
⁵ḶxḶ⁵ị⁵ḶxḶḣṢ
In assenza di un terzo argomento della riga di comando, la costante ⁵
contiene 10 . L' atomo unlengthḶ
crea un intervallo basato su 0, in particolare [0,…, 9] per l'argomento 10 , su entrambi i lati dell'atomo ripetuto sul postox
. Quest'ultimo abbina gli elementi del suo argomento sinistro con le ripetizioni del suo argomento destro e ripete ciascuno degli elementi il numero corrispondente di volte. Con [0,…, 9] sia come argomento sinistro che destro, otteniamo quindi zero zero, uno uno, due due, ecc.
L' indice in atomo ị
recupera l'elemento dell'argomento destro nell'indice specificato in quello sinistro. Con l'argomento sinistro 10 ( ⁵
alla sua sinistra) e l'argomento destro [1, 2, 2, 3, 3, 3, 4, 4, 4, 4,…, 9] (risultato precedente), questo dà 4 .
La catena fino a questo punto è seguita da un nilad non analizzabile ⁵
, quindi il valore di ritorno precedente ( 4 ) viene stampato su STDOUT, il valore di ritorno è impostato su 10 e il resto della catena viene analizzato come al solito.
Come prima, ⁵ḶxḶ
produrrà l'array [1, 2, 2, 3, 3, 3, 4, 4, 4, 4,…, 9] . Questa volta, chiamiamo l' atomo ordinatoṢ
sull'argomento 10 , che promuove 10 a [1, 0] , quindi lo ordina per produrre [0, 1] . L' atomo di testa diadica ora recupera i prefissi di lunghezze 0 e 1 dal risultato a sinistra, lasciandoci con [[], [1]] . In fase di stampa, altro che 1 rimarrà visibile.
⁽{ʂ%⁽{}
⁽
e i suoi due caratteri seguenti costituiscono un valore letterale numerico. Se j e k sono i loro punti di codice nella tabella codici di Jelly e (j, k) <(124, 250) , otteniamo l'intero 1001 + 250j + k . I punti di codice di '{' , '}' e 'ʂ' sono 123 , 125 e 167 , quindi il valore letterale sinistro valuta 1001 + 250 × 123 + 167 (= 31918) , mentre quello destro valuta 1001 + 250 × 123 + 125 (= 31876) .
Poiché il numero intero sinistro è meno del doppio di quello destro, il risultato è (... + 167)% (... + 125) = (... + 167) - (… + 125) = 167-125 = 42 .
ẊẠżv©żvżvżvọ®®Ạżvżvżvọ®
L' atomo shuffleẊ
randomizza l'ordine degli elementi del suo argomento; un argomento numerico z viene promosso in anticipo nell'intervallo [1,…, z] . Per l'argomento implicito 0 , questo intervallo è vuoto e Ẋ
produce [] . L' atomo tuttoẠ
restituisce 1 se tutti gli elementi del suo argomento sono veritieri, 0 in caso contrario. Poiché un array vuoto non contiene elementi falsy, Ạ
restituisce 1 qui.
La cerniera con atomo ż
(una diade) prende argomenti x e y e traspone la coppia [x, y] . Per interi x ed y , questo produce semplicemente [[x, y]] , quindi questo particolare ż
, chiamato con argomenti 1 e 0 (l'argomento implicito), ritorna [[1, 0]] . L' atomo diadico evalv
trasforma tutte le matrici piatte (contenenti solo numeri e caratteri) nell'argomento sinistro in stringhe, quindi valuta le stringhe risultanti come programmi monadici di Jelly con il suo argomento giusto come argomenti dei programmi. Da ["10"]è costituito esclusivamente da letterali, questo ignora l'argomentazione corretta v
e si limita semplicemente a [10] .
La copia rapida si ©
allega v
e copia il suo risultato nel registro. Le occorrenze successive dell'atomo di richiamo®
(un nilad) prenderanno [10] dal registro.
Le prossime tre copie di żv
lavoro come prima, mappando da [10] a [[10, 0] a [100] a ... a [10000] . L' atomo dell'ordineọ
verifica quante volte il suo argomento sinistro è divisibile per il suo argomento destro, quindi qui calcola l'ordine di 10 (recuperato con ®
) in 10000 = 10 4 , ottenendo [4] .
Quanto segue ®
è un nilad non analizzabile, quindi il valore di ritorno precedente ( [4] ) viene stampato su STDOUT, quindi sostituito con il valore di nilad ( 10 ). Applichiamo Ạ
successivamente, producendo 1 . (Ciò è richiesto in quanto un nilad seguito da una diade sarebbe analizzabile a questo punto.)
Come prima, żvżvżv
aggiunge tre zeri al valore di ritorno corrente, trasformando 1 in [1000] . Infine, ọ®
calcola l'ordine di 10 in 1000 = 10 3 e 3 viene stampato su STDOUT al termine del programma.
44
Ancora un altro rimedio, ancora un altro letterale.
111111l11&K1111111Kl11&
Innanzitutto, il valore letterale 111111
imposta l'argomento e il valore di ritorno iniziale su 111111 . Le altre serie di 1
sono anche letterali.
l
è l' atomo logaritmico , che calcola il logaritmo del suo argomento sinistro sulla base specificata in quello destro. Quando viene chiamato 111111 con l'argomento giusto 11 , otteniamo il registro 11 111111 ≈ 4,85 .
Le parole atomo si K
unisce a un argomento dell'elenco negli spazi, dopo aver promosso un carattere z / numerico da [z] . Qui, lo usiamo semplicemente per trasformare l'argomento 111111 del link in [111111] . (Non abbiamo bisogno di un array qui, ma abbiamo esaurito gli atomi di identità.) L' atomo AND bit a bit&
prende i valori di ritorno su entrambi i lati, li lancia a numeri interi se necessario e calcola i loro AND bit a bit. In questo caso particolare, restituisce [4.85 e 111111] = [4 e 111111] = [4] .
Quanto segue 1111111
è un Nilad di analizzarlo, quindi il valore restituito precedente ( [4] ) è stampato a STDOUT, poi sostituito con il valore della Nilad ( 1111111 ). K
quindi trasforma questo numero intero in [1111111] . (Ciò non è ancora necessario, ma a questo punto un nilad seguito da una diade sarebbe analizzabile.)
Come prima, l11
calcola il registro 11 1111111 ≈ 5,81 , quindi &
restituisce [5.81 e 111111] = [5 e 111111] = [5] .
,SS
ỊỊ,ÇS
ÇÑÇÇÇÑ
Questo è l'unico programma costituito da più collegamenti definiti dall'utente. L'ultimo collegamento è il collegamento principale e viene eseguito all'avvio del programma, i restanti sono collegamenti di supporto. Il rapido Ç
si riferisce sempre al collegamento sopra quello corrente e lo esegue in modo monadico. Allo stesso modo, il rapido Ñ
si riferisce sempre al link sotto quello corrente (avvolgendo) e lo esegue anche monadicamente.
Il collegamento superiore costituito dalla coppia atomo ,
- una diade che trasforma argomenti x e y in [x, y] - e la somma atomo S
- una monade che promuove un argomento intero z a [z] e riduce un argomento di matrice per addizione. Quando il collegamento ,SS
viene chiamato con un argomento intero n , calcola Σ [n, Σn] = Σ [n, n] = 2n .
Il collegamento centrale è costituito dagli atomi di cui sopra, il suddetto rapido Ç
e l' atomo insignificanteỊ
- una monade che produce 1 per argomenti numerici z con -1 ≤ z ≤ 1 , ma 0 per tutti gli altri. Applicare Ị
due volte a un argomento intero n essenzialmente lo sostituisce con 1 , poiché l'output del primo Ị
(l' input del secondo) è sempre insignificante. Questo risultato viene quindi associato al valore restituito di Ç
(chiamato con l'argomento n ) e la coppia risultante viene ridotta di S
. In totale, calcoliamoΣ [(| n | ≤ 1) ≤ 1, 2n] = Σ [1, 2n] = 2n + 1 .
Con questi due collegamenti helper in atto, il collegamento principale ora può costruire qualsiasi numero intero non negativo osservando le sue cifre binarie. Con un valore di ritorno iniziale pari a 0 , la catena ÇÑÇÇÇÑ
calcola il risultato finale (((((((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
Il prossimo atomo primo trova il numero primo positivo più piccolo che è strettamente maggiore del suo argomento. Con il valore di ritorno iniziale 0 , quindici invocazioni Æn
calcolano il quindicesimo numero primo, che è 47 .