Gelatina , 47 enteros, 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
Cada línea es un programa separado y completo.
Pruébalo en línea! (incluye conjunto de pruebas y corrector de intersección)
Cómo funciona
Cada programa completo sin argumentos de línea de comandos ejecuta su enlace principal (definido en la última línea) de forma nula, es decir, sin entrada. Si el primer enlace de la cadena es un nilad, se consume, se llama, y tanto el argumento del enlace principal como el valor de retorno se establecen en el resultado; si el primer eslabón de la cadena es una mónada o una díada, se no consumido y el argumento implícito y valor de retorno 0 se utiliza en su lugar. En ambos casos, el resto de la cadena se ejecuta monádicamente.
Jelly destruye su producción en varios casos. Cabe destacar que una matriz singleton se imprime sin los corchetes circundantes, por lo que 42 y [42] son indistinguibles después de la impresión. Usaremos esto en varias ocasiones.
1 - 10
e
El átomo existente prueba si el valor de retorno 0 pertenece al argumento 0 . Lo hace, por lo que e
devuelve 1 .
BI$⁼#
BI$
es un enlace rápido, específicamente una cadena monádica formada por la $
agrupación rápida del átomo binarioB
y el átomo incrementalI
. Combinados, convierten un número entero en la matriz de sus dígitos en la base 2, luego calculan las diferencias hacia adelante de los dígitos resultantes. Si la matriz tiene solo un elemento, no hay diferencias I
directas y devuelve una matriz vacía (falso); si hay al menos dos dígitos, I
devuelve una matriz no vacía (verdad).
El rápido #
consume el enlace rápido anterior y lo aplica a 0 , 1, 2, ... hasta que se encuentran suficientes coincidencias y devuelve la matriz de coincidencias. La cantidad requerida se calcula mediante ⁼
, que compara el valor de retorno / argumento 0 consigo mismo, produciendo 1 . Por lo tanto, todo el programa devuelve [2] , el primer entero no negativo con dos dígitos en la base 2.
⁾⁾⁾Ụ^/
⁾⁾⁾
es una cadena literal, específicamente la cadena ⁾⁾ . El átomo de grado superiorỤ
clasifica sus índices por sus valores correspondientes; Como ambos caracteres son iguales, esto produce [1, 2] . La matriz resultante se reduce con XOR bit a bit ^/
, por lo que todo el programa devuelve 3 .
ı***ıḞḞ
ı
inicializa el argumento y devuelve el valor a la unidad imaginaria i . *
es la diada de exponenciación , cuyo argumento correcto se predetermina al argumento del enlace principal. Por lo tanto, ***ı
calcula ((i i ) i ) i ≈ 4.81 + 0i , el Ḟ
átomo ( piso para argumentos reales , parte real para argumentos complejos) calcula la parte real ( 4.81 ), luego Ḟ
pisos, produciendo 4 .
5
6
7
Estos tres programas consisten en un solo literal y hacen exactamente lo que esperarías.
.::::
El literal .
es una abreviatura de 0.5 e inicializa el argumento y el valor de retorno. El argumento derecho de la división entera de la díada ( :
) por defecto es el argumento de los enlaces principales, por lo que ::::
calcula 0.5 / 0.5 / 0.5 / 0.5 / 0.5 , produciendo 8 .
9
Otro literal
EȮ<
El átomo totalmente igualE
devuelve 1 si todos los elementos en su argumento son iguales y 0 si no. Un argumento entero z se promueve a [z] , por E
lo que devolverá 1 para el argumento implícito 0 .
Ahora, el átomo de salidaȮ
imprime 1 en STDOUT. Luego comparamos 1 con el argumento implícito 0 usando el átomo menor que<
. El resultado es (1 <0) = 0 , y se imprime implícitamente cuando finaliza el programa.
11 - 20
⁻GṘ
El átomo de la cuadrículaG
intenta hacer una tabla visualmente agradable a partir de su argumento. Para un argumento entero simple (aquí: 0 ), simplemente lo envuelve en una matriz. El átomo plano no igual⁻
compara el argumento implícito 0 con el resultado a la derecha ( [0] ), produciendo 1 ya que sus argumentos no son iguales. El átomo de representaciónṘ
imprime 1 en STDOUT y devuelve su resultado. Al final del programa, el valor de retorno final se imprime implícitamente, por lo que terminamos con una salida de 11 .
=`p`VV×`DQV
los auto- rápido `
convierte una díada en una mónada llamándola con idénticos argumentos izquierdo y derecho. Primero, =`
compara el argumento implícito 0 consigo mismo, produciendo 1 .
El átomo de producto cartesianop
espera listas como argumentos, por lo que promueve el entero 1 al rango [1, ..., 1] = [1] . p`
toma el producto cartesiano de [1] y en sí mismo, produciendo [[1, 1]] .
El átomo evalV
convierte todas las matrices planas (que contienen solo números y caracteres) en cadenas, luego evalúa las cadenas resultantes como programas Jelly niládicos. [[1, 1]] se convierte primero en ["11"] , luego V
evalúa la cadena, produciendo [11] . Una vez más, V
convierte esta matriz en "11" , luego la evalúa para obtener 11 .
Ahora, ×`
multiplica 11 consigo mismo, produciendo 121 . El átomo decimal convierte 121 en [1, 2, 1] , el átomo únicoQ
descarta el segundo 1 , y V
una vez más convierte una lista de dígitos en el entero que resulta de concatenarlos, devolviendo 12 .
~A~A~A~A~A~A~A~A~A~A~A~A~A
~
es el átomo NO bit a bit . Con la aritmética del complemento a dos, asigna un argumento z a ~ z = - (z + 1) . A
es el átomo de valor absoluto , por lo que asigna - (z + 1) = z + 1 . Con el valor de retorno inicial 0 , las trece copias del ~A
retorno 13 .
⁷ṾṾṾw
La constante ⁷
contiene el carácter de nueva línea '\ n' e inicializa el argumento y el valor de retorno.
El átomo no válidoṾ
intenta crear una representación de cadena de su argumento z de manera que un programa Jelly que consista en este código devuelva z .
La primera llamada devuelve obedientemente la cadena "” \ n " , que es un carácter literal. La siguiente llamada devuelve "” ”,” \ n " - un par de literales de caracteres. La tercera y última llamada devuelve "” ”,” ”,” ,, ””, ”\ n" - un quintillizo de literales de caracteres.
Finalmente, el átomo del índice de la ventanaw
promueve su argumento correcto '\ n' a la cadena "\ n" y encuentra el primer índice de una subcadena que comienza con "\ n" . Esto vuelve 14 .
⁴ḟ€⁴Ṁ
⁴
es la constante 16 . El filtro de enlace rápido falla cada ( ḟ€
) promueve su argumento izquierdo 16 al rango [1, ..., 16] , luego itera sobre sus elementos.
Para cada elemento z , ḟ⁴
se ejecuta, primero promocionando z a [z] , luego eliminando todas (si las hay) ocurrencias de 16 . Esto produce la matriz [[1], [2],…, [14], [15], []] , donde la última matriz está vacía porque contenía 16 .
Finalmente, el átomo máximoṀ
selecciona [15] .
mmmmċ
El átomo modularm
, llamado con argumentos x (matriz) e y (entero) generalmente toma cada | y | th elemento de x , comenzando con el primero si y> 0 , con el último si y <0 . Sin embargo cuando y = 0 , devuelve x concatenado con su reverso.
El argumento entero izquierdo 0 se promueve primero a [0] . La primera copia de m
concatena [0] consigo misma, produciendo [0, 0] . Las copias restantes convierten este resultado en [0, 0, 0, 0] , luego [0, 0, 0, 0, 0, 0, 0, 0] y finalmente [0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] .
Por último, el átomo de conteoċ
cuenta el número de veces que el argumento implícito 0 aparece en la matriz resultante, devolviendo 16 .
ṭṭṭṭṭṭṭṭḍḄḄḄḄḄḄḄḄḄ
ṭ
es el átomo de tachuela y agrega su argumento izquierdo al derecho. Como ṭ
y lo siguiente ḍ
son diádicos, todas las llamadas para ṭ
pasar el argumento implícito 0 como el argumento correcto para ṭ
. La primera llamada devuelve [0, 0] , la segunda [0, [0, 0] y la octava y última [0, [0, [0, [0, [0, [0, [0, [0, 0]]]]]]]] .
ḍ
es el átomo de divisibilidad ; Para argumentos x y y , devuelve 1 es x es divisible por y , 0 si no. Ḅ
es un no-op para enteros, por lo que ḍḄ
prueba 0 para la divisibilidad por cada entero en la matriz construida. 0 es divisible por sí mismo, por lo que obtenemos [1, [1, [1, [1, [1, [1, [1, [1, 1]]]]]]]] .
Ahora, el átomo no binarioḄ
opera en matrices planas. Para un par [a, b] , simplemente devuelve 2a + b . Como se mencionó anteriormente, Ḅ
es un no-op para enteros: un argumento entero c se promueve a [c] , y [c] en cualquier base es simplemente c .
La primera llamada a Ḅ
reduce [1, 1] a 3 , dando así [1, [1, [1, [1, [1, [1, [1, 3]]]]]]] . La próxima llamada reduce [1, 3] a 5 , la siguiente [1, 5] a 7 , y así sucesivamente hasta que la novena Ḅ
devuelva 17 .
+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ
Ṇ
es el átomo NOT lógico plano y asigna el argumento implícito 0 a 1 . +
es el átomo de suma, por lo que cada una de las dieciocho copias +Ṇ
incrementa el valor de retorno anterior (inicialmente 0 ). Todo el programa devuelve así 18 .
CNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNC
C
es el átomo del complemento y asigna su argumento z a 1-z . N
es el átomo negativo y asigna su argumento z a -z . Juntos, CN
asigna z a - (1-z) = z-1 , por lo que las dieciocho copias convierten el argumento implícito 0 en -18 . Una aplicación final de C
rendimientos 1 - (-18) = 19
.
ĖḌĖḌ
El enumerate átomo Ė
enumera los elementos de una matriz, creando pares de índice de valor. El argumento implícito 0 se promueve a [0] , luego Ė
produce [[1, 0]] . El átomo no decimal convierte una matriz plana de base 10 a entero, produciendo [10] en este caso particular.
La segunda llamada a Ė
transforma [10] en [[1, 10]] , que la segunda Ḍ
finalmente transforma en [20] .
21 - 30
ṫṣȦJṫȦ⁸ȦJ
El átomo de colaṫ
(una díada) selecciona el postfix de su argumento izquierdo que comienza en el índice (basado en 1 y modular) especificado en su argumento derecho, promoviendo un argumento entero izquierdo x a [x] . Cuando se llama con ambos argumentos establecidos en 0 , ṫ
devuelve [0] .
El átomo any and allȦ
devuelve 1 si su argumento es verdadero y no contiene ceros a ninguna profundidad, 0 de lo contrario. Aquí, simplemente lo usamos como una función de identidad para devolver el argumento implícito 0 . La división en el átomo ṣ
divide su argumento izquierdo [0] en las apariciones de su argumento derecho 0 , por lo que devuelve [[], []] aquí.
El átomo de índicesJ
descarta los elementos del valor de retorno y los reemplaza con sus índices, produciendo el rango [1, 2] en este caso específico. Ȧ
y ṫ
ambos funcionan como antes, por lo que reducen [1, 2] al postfix que comienza en el último índice, produciendo [2] .
En enlaces niládicos, la constante se ⁸
mantiene [] . Esta es una nilad no analizable, es decir, no cabe en la cadena de ninguna manera. Como resultado, el valor de retorno anterior ( [2] ) se imprime en STDOUT, luego se reemplaza con el valor de nilad ( [] ).
Como [] es falso, lo Ȧ
transforma en 0 . El J
átomo promueve 0 a [0] , luego devuelve la lista de sus índices ( [1] ), que se imprime implícitamente cuando finaliza el programa.
22
Otro literal Los Repdigits parecen ser el mejor lugar para usarlos.
“@ṃ»
Esto utiliza la compresión de cadena incorporada de Jelly. Los índices de @ y ṃ en la página de códigos de Jelly son 64 y 220 y los literales de cadena pueden contener 250 caracteres diferentes, por lo que esto primero calcula el entero 250 × 65 + 220 = 16470 .
16470 es divisible por 3, por lo que el cociente 16470/3 = 5490 codifica un carácter ASCII imprimible o un salto de línea. Hay 96 de estos y 5490 = 96 × 57 + 18 , lo que significa que hemos decodificado el carácter ASCII imprimible en el índice 18 basado en 0 , que es '2' .
Nos queda 57 , que también es divisible entre 3 , por lo que el cociente 57/3 = 19 = 96 × 0 + 19 codifica el carácter ASCII imprimible en el índice 18 basado en 0 , que es '3' .
Esto deja 0 ; El proceso de decodificación se detiene. Los caracteres generados se concatenan para formar "23"
!ḤḤ!
El átomo factorial!
convierte el argumento implícito 0 en 1 . Dos invocaciones del átomo unhalveḤ
convierten 1 en 2 , luego 2 en 4 . Finalmente, !
calcula 4! = 24 .
³HH
En ausencia de argumentos de línea de comandos, la constante ³
contiene 100 . Dos invocaciones de las H
vueltas 100 en 50 , luego 50 en 25 .
ØaM
La constante Øa
contiene el alfabeto en minúsculas. El átomo máximoM
produce todos los índices de elementos máximos, y dado que z es la letra minúscula más grande, el resultado es [26] .
;;;;;;;;;;;;;;;;;;;;;;;;;;;¬¬ḅ¬
Veintiséis copias de la concatenar átomo de ;
concatenar el valor de retorno inicial 0 y veintiséis instancias del argumento por defecto 0 , la construcción de una serie de 27 ceros.
¬
es el átomo lógico NOT , por lo que ;¬
agrega un 1 a la matriz de ceros. El siguiente ¬
niega todos los elementos en la matriz, dejándonos con una matriz de 27 unidades y 1 cero.
ḅ
es la unbase átomo y convierte una matriz de dígitos de su argumento izquierdo de la base especificado en su argumento de la derecha a un entero. ḅ¬
convierte de unario a entero, por lo que simplemente realiza una suma. Para una matriz de 27 unidades, esto devuelve 27 .
irið8c
El índice del átomo i
promueve su argumento izquierdo 0 a [0] , luego encuentra el índice de su argumento derecho 0 en esa matriz, produciendo 1 .
El átomo de rangor
construye un rango ascendente o descendente desde su argumento izquierdo al derecho. El argumento correcto es el argumento implícito 0 , por lo que esto produce [1, 0] . Una segunda invocación de i
encuentra el índice de 0 en [1, 0] , produciendo 2 .
ð
comienza una nueva cadena diádica. Como la cadena anterior era niládica, tanto el argumento izquierdo como el derecho de esta cadena serán iguales al valor de retorno de la primera cadena ( 2 ). c
en las combinaciones atomo. Con el argumento izquierdo 8 y el argumento derecho 2 , cuenta todas las combinaciones 2 únicas y desordenadas de un conjunto de 8 elementos, devolviendo 8C2 = 8! / (6! 2!) = 28 .
⁶ḲĠṂ°İṂĊ
La constante ⁶
contiene un carácter de espacio y establece el argumento y el valor de retorno en '' . Las palabras átomo Ḳ
promueven el carácter '' a la cadena singleton "" y lo divide en espacios, produciendo [[], []] .
El átomo del grupoĠ
agrupa todos los índices de elementos iguales. Como ambos elementos del último valor de retorno son iguales, devuelve [[1, 2]] aquí. El átomo mínimo extrae un elemento mínimo (el único) de esta matriz, produciendo [1, 2] .
El átomo de grado°
convierte ambos enteros de grados sexagesimales a radianes, produciendo 1 ° × 2π / 360 ° = π / 180 y 2 ° × 2π / 360 ° = π / 90 . El átomo inverso toma los inversos multiplicativos, produciendo 180 / π ≈ 57.3 y 90 / π ≈ 28.6 .
Luego, Ṃ
una vez más toma el mínimo, dando 28,6 . Finalmente, el átomo del techoĊ
transforma 28.6 en 29 .
œṡ¹ẆẆTUṖṖṖṖP
El átomo de identidad¹
devuelve 0 para el argumento implícito 0 . El átomo dividido alrededorœṡ
promueve sus dos argumentos (ambos 0 ) a [0] , luego divide [0] alrededor de subconjuntos contiguos iguales a [0] . Esto produce [[], []] .
El átomo de la ventana deslizanteẆ
construye todas las subconjuntos contiguos de su argumento. La primera instancia transforma [[], []] en [[[]], [[]], [[], []]] , la segunda instancia transforma [[[]], [[]], [[]] , []]] en
[[[[]]], [[[]]], [[[], []]], [[[]], [[]]], [[[]], [ [], []]], [[[]], [[]], [[], []]]] .
El átomo de verdadT
enumera todos los índices de elementos de verdad. Ninguna de las matrices en el primer nivel está vacía, por lo que esto produce [1, 2, 3, 4, 5, 6] . El átomo invertidoU
invierte esta matriz, produciendo [6, 5, 4, 3, 2, 1] .
Cuatro copias del átomo popṖ
eliminan los últimos cuatro elementos, dejándonos con [6, 5] . Finalmente, el átomo del productoP
transforma esta matriz en 30 .
31 - 40
ȷ½RṪ
ȷ
es una abreviatura de 1 × 10 3 = 1000 . El átomo de raíz cuadrada½
produce 31.6 , que el átomo de rango seR
transforma en [1, ..., 31] . Finalmente, el átomo de colaṪ
extrae el último elemento, devolviendo 31 .
LµdddddµFL
los átomo de longitudL
promueve el argumento implícito 0 a [0] , luego toma la longitud para producir 1 . µ
comienza una nueva cadena monádica y el resultado 1 se convierte en su argumento.
Para argumentos x y y , el átomo divmodd
produce [x / y, x% y] . Cada llamada tendrá y = 1 , por lo que el resultado siempre será [x, 0] .
La primera llamada comienza con x = 1 , produciendo [1, 0] . d
solo opera en enteros, por lo que se vectoriza en llamadas posteriores. La segunda llamada produce [[1, 0], [0, 0]] , la tercera [[[1, 0], [0, 0]], [[0, 0], [0, 0]]] , y el quinto y último, una matriz de profundidad 5 que contiene uno solo y 31 ceros.
µ
una vez más comienza una nueva cadena monádica, y la matriz de antes se convierte en su argumento. los átomo plano noF
necesita esta matriz, produciendo una matriz plana de uno solo y 31 ceros. Finalmente, L
toma la longitud del resultado, devolviendo 32 .
33
Otro repdigito, otro literal.
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWŒḊ
Cada instancia del átomo de envoltura transforma su argumento z en [z] . Con el valor de retorno inicial de 0 , las 34 instancias juntas producen [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[0]) ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] . Finalmente, el átomo de profundidadŒḊ
calcula la profundidad máxima de la matriz resultante, devolviendo 34 .
ẇɓæ«æ«æ«æ«æ«|æ«|
La ventana existe atom ẇ
promueve sus dos argumentos (ambos predeterminados a 0 ) para [0] , luego prueba si ** [0] ** ocurre como un subconjunto contiguo de [0] . Lo hace, por lo que ẇ
devuelve 1 .
ɓ
comienza una nueva cadena diádica. Como la cadena anterior era niládica, tanto el argumento izquierdo como el derecho de esta cadena serán iguales al valor de retorno de la primera cadena ( 1 ). La cadena utiliza dos átomos diádicos diferentes: desplazamiento a la izquierda ( æ«
) y OR ( |
) a nivel de bits .
Una cadena diádica que comienza con tres o más díadas inicialmente llama a la primera díada con los argumentos de la cadena. Aquí, esto da 1 << 1 = 2 . Las seis díadas posteriores se agrupan en pares (denominadas horquillas ), donde la díada más a la derecha se llama primero con los argumentos de la cadena, luego la más a la izquierda se llama con los valores de retorno anteriores a ambos lados.
Para æ«æ«
, obtenemos 2 << (1 << 1) = 2 << 2 = 8 . Entonces,æ«æ«
calcula 8 << (1 << 1) = 8 << 2 = 32 . Ahora, |æ«
nos consigue 32 | (1 << 1) = 32 | 2 = 34 .
Finalmente, el rastro |
actúa como un gancho y se llama con el valor de retorno anterior como argumento izquierdo y el argumento derecho de la cadena como derecho. Esto devuelve 34 | 1 = 35 .
⁹ṚḢ²
En ausencia de un segundo argumento, la constante ⁹
tiene 256 . El átomo inverso promueve 256 a la matriz [2, 5, 6] y lo invierte para producir [6, 5, 2] . Luego, el átomo de cabezaḢ
extrae el primer elemento, y el átomo cuadrado²
devuelve ** 6² = 36 *.
‘‘‘0‘‘‘‘‘‘‘
El incremento átomo ‘
incrementa su argumento 1 , por lo que ‘‘‘
a su vez el valor de retorno inicial 0 en 3 . El siguiente 0 es un nilad no analizable, es decir, no cabe en la cadena de ninguna manera. Como resultado, el valor de retorno anterior ( 3 ) se imprime en STDOUT, luego se reemplaza con el valor de nilad ( 0 ).
Las siguientes 7 copias de ‘
convertir este 0 en 7 , que se imprime implícitamente cuando finaliza el programa.
’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ạ
El decremento átomo ’
decrementa su argumento 1 , por lo que treinta y ocho copias a su vez el valor de retorno inicial 0 en -38 . El átomo de diferencia absolutaạ
calcula la diferencia sin signo entre -38 y el argumento implícito 0 , devolviendo 38 .
-____---__________
-
es una abreviatura de -1 y establece el argumento del enlace y el valor de retorno en -1 . Cada uno _
es una instancia de la diádica átomo de sustracción , cuyo argumento correcto tendrá un valor predeterminado de -1 si falta.
Primero, -____-
calcula (-1) - (-1) - (-1) - (-1) - (-1) = 3 . El siguiente -1 es un nilad no analizable, por lo que el valor de retorno anterior ( 3 ) se imprime en STDOUT, luego se reemplaza con el valor del nilad ( -1 ).
A continuación, -_
calcula (-1) - (-1) = 0 , donde el literal -
establece el argumento izquierdo_
y usa el valor de retorno como el derecho. Las siguientes nueve copias _
restan el argumento predeterminado -1 del valor de retorno, produciendo 9 , que se imprime implícitamente cuando finaliza el programa.
”(O
”(
es un carácter literal y el ordinal átomoO
busca su punto de código Unicode, produciendo 40 .
41 - 47
⁵ḶxḶ⁵ị⁵ḶxḶḣṢ
En ausencia de un tercer argumento de línea de comando, la constante ⁵
contiene 10 . El átomo de longitud libreḶ
crea un rango basado en 0, específicamente [0, ..., 9] para el argumento 10 , a ambos lados del átomo de repetición en el lugarx
. Este último hace coincidir elementos de su argumento izquierdo con repeticiones de su argumento derecho, y repite cada uno de los elementos el número correspondiente de veces. Con [0, ..., 9] como argumento izquierdo y derecho, obtenemos ceros cero, uno, dos, etc.
El índice en el átomo ị
obtiene el elemento de su argumento derecho en el índice especificado en el izquierdo. Con argumento izquierdo 10 ( ⁵
a su izquierda) y argumento derecho [1, 2, 2, 3, 3, 3, 4, 4, 4, 4,…, 9] (resultado anterior), esto da 4 .
La cadena hasta este punto es seguida por una nilad no analizable ⁵
, por lo que el valor de retorno anterior ( 4 ) se imprime en STDOUT, el valor de retorno se establece en 10 y el resto de la cadena se analiza como de costumbre.
Como antes, ⁵ḶxḶ
producirá la matriz [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, ..., 9] . Esta vez, llamamos al átomo ordenadoṢ
en el argumento 10 , que promueve 10 a [1, 0] , luego lo ordena para obtener [0, 1] . El átomo de cabeza diádica ahora obtiene los prefijos de longitudes 0 y 1 del resultado a la izquierda, dejándonos con [[], [1]] . Cuando se imprime, nada más que 1 permanecerá visible.
⁽{ʂ%⁽{}
⁽
y sus dos siguientes caracteres constituyen un literal numérico. Si j y k son sus puntos de código en la página de códigos de Jelly y (j, k) <(124, 250) , obtenemos el número entero 1001 + 250j + k . Los puntos de código de '{' , '}' y 'ʂ' son 123 , 125 y 167 , por lo que el literal izquierdo se evalúa a 1001 + 250 × 123 + 167 (= 31918) , mientras que el derecho se evalúa a 1001 + 250 × 123 + 125 (= 31876) .
Dado que el entero izquierdo es menos del doble del grande que el derecho, el resultado es (... + 167)% (... + 125) = (... + 167) - (... + 125) = 167-125 = 42 .
ẊẠżv©żvżvżvọ®®Ạżvżvżvọ®
La reproducción aleatoria átomo Ẋ
cambia aleatoriamente el orden de los elementos de su argumento; un argumento numérico z se promueve al rango [1, ..., z] de antemano. Para el argumento implícito 0 , este rango está vacío y Ẋ
produce [] . El todo átomo Ạ
devuelve 1 si todos los elementos de su argumento son Truthy, 0 en caso contrario. Como una matriz vacía no contiene elementos falsos, Ạ
devuelve 1 aquí.
El zip con el átomo ż
(una díada) toma argumentos x e y y transpone el par [x, y] . Para los enteros x e y , esto simplemente produce [[x, y]] , por lo que este particular ż
, llamado con argumentos 1 y 0 (el argumento implícito), devuelve [[1, 0]] . El átomo de evaluación diádicov
convierte todas las matrices planas (que contienen solo números y caracteres) en el argumento izquierdo en cadenas, luego evalúa las cadenas resultantes como programas Jelly monádicos con su argumento derecho como argumentos de los programas. Desde ["10"]consiste únicamente en literales, esto ignora el argumento correcto v
y simplemente da como resultado [10] .
La copia se©
adjunta rápidamente v
y copia su resultado en el registro. Las apariciones posteriores del átomo de recuperación®
(un nilad) obtendrán [10] del registro.
Las siguientes tres copias del żv
trabajo como antes, asignando [10] a [[10, 0] a [100] a ... a [10000] . El átomo de ordenọ
prueba cuántas veces su argumento izquierdo es divisible por el derecho, por lo que aquí, calcula el orden de 10 (obtenido con ®
) en 10000 = 10 4 , produciendo [4] .
El siguiente ®
es un nilad no analizable, por lo que el valor de retorno anterior ( [4] ) se imprime en STDOUT, luego se reemplaza con el valor del nilad ( 10 ). Aplicamos a Ạ
continuación, produciendo 1 . (Esto se requiere ya que una nilad seguida de una díada sería analizable en este punto).
Como antes, żvżvżv
agrega tres ceros al valor de retorno actual, convirtiendo 1 en [1000] . Finalmente, ọ®
calcula el orden de 10 en 1000 = 10 3 , y 3 se imprime en STDOUT cuando finaliza el programa.
44
Sin embargo, otro repdigito, otro literal.
111111l11&K1111111Kl11&
En primer lugar, el literal 111111
establece el argumento y el valor de retorno inicial en 111111 . Las otras corridas 1
también son literales.
l
es el átomo de logaritmo , que calcula el logaritmo de su argumento izquierdo a la base especificada en el derecho. Cuando se invoca 111111 con el argumento correcto 11 , obtenemos log 11 111111 ≈ 4.85 .
Las palabras átomo se K
une a un argumento de lista en espacios, después de promover un carácter numérico / z a [z] . Aquí, simplemente lo usamos para convertir el argumento 111111 del enlace en [111111] . (No requerimos una matriz aquí, pero nos hemos quedado sin átomos de identidad). El átomo AND bit a bit&
toma los valores de retorno a ambos lados, los convierte en enteros si es necesario, y calcula su AND bit a bit. En este caso particular, devuelve [4.85 y 111111] = [4 y 111111] = [4] .
El siguiente 1111111
es un nilad no analizable, por lo que el valor de retorno anterior ( [4] ) se imprime en STDOUT, luego se reemplaza con el valor del nilad ( 1111111 ). K
luego convierte este número entero en [1111111] . (Una vez más, esto no es realmente necesario, pero una nilad seguida de una díada sería analizable en este punto).
Como antes, l11
calcula el registro 11 1111111 ≈ 5.81 , luego &
devuelve [5.81 y 111111] = [5 y 111111] = [5] .
,SS
ỊỊ,ÇS
ÇÑÇÇÇÑ
Este es el único programa que consta de múltiples enlaces definidos por el usuario. El último enlace es el enlace principal y se ejecuta cuando se inicia el programa, los restantes son enlaces auxiliares. El rápido Ç
siempre se refiere al enlace sobre el actual y lo ejecuta monádicamente. Del mismo modo, el rápido Ñ
siempre se refiere al enlace debajo del actual (envolviendo) y también lo ejecuta monádicamente.
El enlace superior consiste en el átomo par,
, una díada que convierte los argumentos x e y en [x, y] , y el átomo de sumaS
, una mónada que promueve un argumento entero z a [z] y reduce un argumento de matriz por adición. Cuando ,SS
se llama al enlace con un argumento entero n , calcula Σ [n, Σn] = Σ [n, n] = 2n .
El enlace del medio consiste en los átomos anteriores, el rápido mencionado anteriormente Ç
y el átomo insignificanteỊ
, una mónada que produce 1 para argumentos numéricos z con -1 ≤ z ≤ 1 , pero 0 para todos los demás. Aplicar Ị
dos veces a un argumento entero n esencialmente lo reemplaza por 1 , ya que la salida del primero Ị
(la entrada del segundo) siempre es insignificante. Este resultado se combina con el valor de retorno de Ç
(llamado con el argumento n ), y el par resultante se reduce en S
. En total, calculamosΣ [(| n | ≤ 1) ≤ 1, 2n] = Σ [1, 2n] = 2n + 1 .
Con estos dos enlaces auxiliares en su lugar, el enlace principal ahora puede construir cualquier número entero no negativo mirando sus dígitos binarios. Con un valor de retorno inicial de 0 , la cadena ÇÑÇÇÇÑ
calcula el resultado final ((((((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
El siguiente átomo primo encuentra el número primo positivo más pequeño que es estrictamente mayor que su argumento. Con el valor de retorno inicial 0 , quince invocaciones de Æn
calcular el decimoquinto número primo, que es 47 .