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 edevuelve 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 Idirectas y devuelve una matriz vacía (falso); si hay al menos dos dígitos, Idevuelve 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 Elo 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 Vevalúa la cadena, produciendo [11] . Una vez más, Vconvierte 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 Vuna 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) . Aes el átomo de valor absoluto , por lo que asigna - (z + 1) = z + 1 . Con el valor de retorno inicial 0 , las trece copias del ~Aretorno 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 mconcatena [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
Ces el átomo del complemento y asigna su argumento z a 1-z . Nes el átomo negativo y asigna su argumento z a -z . Juntos, CNasigna 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 Crendimientos 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 Hvueltas 100 en 50 , luego 50 en 25 .
ØaM
La constante Øacontiene 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 ipromueve 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 iencuentra 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 ). cen 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] . dsolo 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, Ltoma 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 vy simplemente da como resultado [10] .
La copia se© adjunta rápidamente vy 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 żvtrabajo 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żvagrega 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 111111establece el argumento y el valor de retorno inicial en 111111 . Las otras corridas 1también son literales.
les 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 Kune 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 1111111es 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 ). Kluego 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, l11calcula 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 ,SSse 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 Æncalcular el decimoquinto número primo, que es 47 .