Желе , 47 целых чисел, 519 байт
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
Каждая строка - это отдельная, полная программа.
Попробуйте онлайн! (включает набор тестов и проверку пересечения)
Как это устроено
Каждая полная программа без аргументов командной строки выполняет свою основную ссылку (определенную в последней строке) неформально, то есть без ввода. Если первая ссылка в цепочке является nilad, она используется, вызывается, и в качестве аргумента и возвращаемого значения основной ссылки устанавливаются результат; Если первое звено в цепочке является монадой или диадой, оно не используется и вместо него используется неявный аргумент и возвращаемое значение 0 . В обоих случаях остаток цепочки выполняется монадически.
Желе калечит свою продукцию в нескольких случаях. Примечательно, что одноэлементный массив печатается без окружающих скобок, поэтому 42 и [42] и неразличимы после печати. Мы будем использовать это несколько раз.
1 - 10
e
Существует тесты атома , если возвращаемое значение 0 принадлежит к аргументу 0 . Это так, поэтому e
возвращает 1 .
BI$⁼#
BI$
является быстрой связью, в частности, монадической цепью, образованной быстрой $
группировкой двоичного атома B
и атома приращенийI
. В совокупности они преобразуют целое число в массив его цифр в базе 2, а затем вычисляют прямую разницу получаемых цифр. Если в массиве есть только один элемент, то нет прямых различий, и он I
возвращает пустой массив (ложь); если есть хотя бы две цифры, I
возвращает непустой массив (правда).
Быстрый #
использует предыдущую быструю ссылку и применяет ее к 0 , 1, 2,… до тех пор, пока не будет найдено достаточно совпадений, и не возвращает массив совпадений. Требуемая сумма рассчитывается с помощью ⁼
, которая сравнивает возвращаемое значение / аргумент 0 с собой, получая 1 . Таким образом, вся программа возвращает [2] , первое неотрицательное целое число с двумя цифрами в базе 2.
⁾⁾⁾Ụ^/
⁾⁾⁾
строковый литерал, в частности, строка ⁾⁾ . Сравняться атом Ụ
сортирует свои показатели их соответствующих значения; так как оба символа равны, это приводит к [1, 2] . Полученный массив уменьшается с помощью битового XOR ^/
, поэтому вся программа возвращает 3 .
ı***ıḞḞ
ı
инициализирует аргумент и возвращает значение мнимой единице i . *
является диадой возведения в степень , правый аргумент которой по умолчанию соответствует аргументу главной ссылки. Таким образом, ***ı
вычисляет ((i i ) i ) i ≈ 4.81 + 0i , Ḟ
атом ( пол для вещественных аргументов, действительная часть для сложных) вычисляет действительную часть ( 4.81 ), а затем Ḟ
этажи, получая 4 .
5
6
7
Эти три программы состоят из одного литерала и делают именно то, что вы ожидаете.
.::::
Литерал .
является сокращением для 0.5 и инициализирует аргумент и возвращаемое значение. В целочисленное деление диады ( в :
) правый аргумент по умолчанию основных звеньев аргумента, так ::::
вычисляет 0,5 / 0,5 / 0,5 / 0,5 / 0,5 , получая 8 .
9
Еще один буквальный.
EȮ<
Полностью равный атом E
возвращает 1, если все элементы в его аргументе равны, и 0, если нет. Целочисленный аргумент z повышен до [z] , поэтому E
он возвращает 1 для неявного аргумента 0 .
Теперь выходной атом Ȯ
выводит 1 в STDOUT. Затем мы сравниваем 1 с неявным аргументом 0, используя атом меньше<
. Результат (1 <0) = 0 , и он печатается неявно, когда программа заканчивается.
11 - 20
⁻GṘ
Сетка атом G
пытается сделать визуально приятную таблицу из своего аргумента. Для простого целочисленного аргумента (здесь: 0 ) он просто оборачивает его в массив. Плоский не равно атом ⁻
сравнивает неявный аргумент 0 в результате вправо ( [0] ), что дает 1 , поскольку ее аргументы не равны. В представительских атом Ṙ
печатает 1 к STDOUT и возвращает его результат. В конце программы, окончательное возвращаемое значение печатается неявно, так что в итоге мы получим 11 .
=`p`VV×`DQV
Сам быстро `
превращается диада в монады, вызвав его с одинаковыми левыми и правыми аргументами. Сначала =`
сравнивается неявный аргумент 0 с самим собой, давая 1 .
Декартово произведение атом p
ожидает списки в качестве аргументов, так что способствует целому числу 1 в диапазоне [1, ..., 1] = [1] . p`
берет декартово произведение [1] и себя, получая [[1, 1]] .
Eval атом V
превращает все плоские массивы (содержащие только цифры и символы) в строки, а затем оценивает результирующие строки как niladic программ желе. [[1, 1]] сначала превращается в [«11»] , затем V
удаляет строку, давая [11] . Еще раз, V
превращает этот массив в «11» , а затем обнуляет его, чтобы получить 11 .
Теперь ×`
умножает 11 на себя, получая 121 . Десятичного атом превращается 121 в [1, 2, 1] , то уникальный атом Q
отбрасывает второй 1 , и V
еще раз получается список цифр в целое число , которое является результатом конкатенации их возвращения 12 .
~A~A~A~A~A~A~A~A~A~A~A~A~A
~
это побитовый атом НЕ . С арифметикой дополнения до двух он отображает аргумент z в ~ z = - (z + 1) . A
является атомом абсолютного значения , поэтому он отображает - (z + 1) = z + 1 . При начальном возвращаемом значении 0 тринадцать ~A
возвращают 13 .
⁷ṾṾṾw
Константа ⁷
содержит символ новой строки '\ n' и инициализирует аргумент и возвращаемое значение.
Uneval атом Ṿ
пытается создать строковое представление его аргумент г такого , что программа Jelly , состоящая из этого кода будет возвращать г .
Первый вызов покорно возвращает строку «» \ n » , которая является символьным литералом. Следующий вызов возвращает «» »,« \ n » - пару символьных литералов. Третий и последний вызов возвращает "” ”,” ”,” ,, ””, ”\ n" - пятерку символьных литералов.
Наконец, атом индекса окнаw
переводит свой правый аргумент '\ n' в строку "\ n" и находит первый индекс подстроки, начинающейся с "\ n" . Это возвращает 14 .
⁴ḟ€⁴Ṁ
⁴
константа 16 . Quicklink filterfalse each ( ḟ€
) переводит свой левый аргумент 16 в диапазон [1,…, 16] , затем перебирает его элементы.
Для каждого элемента г , ḟ⁴
выполняется, сначала продвижение г в [г] , то удаление всех (если таковые имеются) вхождения 16 . Это дает массив [[1], [2],…, [14], [15], []] , где последний массив пуст, потому что он содержал 16 .
Наконец, максимальный атом Ṁ
выбирает [15] .
mmmmċ
Модульное атом m
- вызывается с аргументами х (массив) и у (целое число) , как правило , принимает все | у | th-й элемент x , начиная с первого, если y> 0 , с последним, если y <0 . Однако, когда y = 0 , он возвращает x, соединенный с его обратным.
Левый целочисленный аргумент 0 сначала переводится в [0] . Первая копия m
объединяет [0] с собой, давая [0, 0] . Оставшиеся копии превращают этот результат в [0, 0, 0, 0] , затем [0, 0, 0, 0, 0, 0, 0, 0] и, наконец, [0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] .
Наконец, счетчик атом ċ
подсчитывает количество раз неявного аргумента 0 появляется в результирующем массиве, возвращающиеся 16 .
ṭṭṭṭṭṭṭṭḍḄḄḄḄḄḄḄḄḄ
ṭ
является липкость атома и присоединяет его левый аргумент в его правом. Поскольку ṭ
и следующие ḍ
являются двоичными, все вызовы для ṭ
передачи неявного аргумента 0 в качестве правильного аргумента ṭ
. Первый вызов возвращает [0, 0] , второй [0, [0, 0] , а восьмой и последний [0, [0, [0, [0, [0, [0, [0, [0, 0]]]]]]]] .
ḍ
является атомом делимости ; для аргументов x и y возвращается 1 , если x делится на y , 0 если нет. Ḅ
не используется для целых чисел, поэтому ḍḄ
проверяет 0 на делимость на каждое целое число в построенном массиве. 0 делится само по себе, поэтому мы получаем [1, [1, [1, [1, [1, [1, [1, [1, 1]]]]]]]]] .
Теперь небинарный атом Ḅ
работает на плоских массивах. Для пары [a, b] он просто возвращает 2a + b . Как упомянуто ранее, Ḅ
это неоперативный для целых чисел: целочисленный аргумент c повышен до [c] , а [c] в любой базе просто c .
Первый вызов Ḅ
уменьшает [1, 1] до 3 , что приводит к [1, [1, [1, [1, [1, [1, [1, 3]]]]]]]] . Следующий вызов уменьшает [1, 3] до 5 , следующий [1, 5] до 7 и так далее, пока девятый не Ḅ
вернет 17 .
+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ
Ṇ
является плоским логическим атомом NOT и отображает неявный аргумент от 0 до 1 . +
является атомом сложения, поэтому каждая из восемнадцати копий +Ṇ
увеличивает предыдущее возвращаемое значение (изначально 0 ). Вся программа, таким образом, возвращает 18 .
CNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNC
C
является атомом дополнения и отображает его аргумент z в 1-z . N
является атомом отрицания и отображает его аргумент z в -z . Вместе они CN
сопоставляют z с - (1-z) = z-1 , поэтому восемнадцать копий превращают неявный аргумент 0 в -18 . Окончательное применение C
урожайности 1 - (-18) = 19
.
ĖḌĖḌ
Перечисление атом Ė
перечисляет элементы в массиве, создавая пар индекс-значение. Неявный аргумент 0 переводится в [0] , а затем Ė
приводит к [[1, 0]] . Undecimal атом преобразует плоский массив от основания 10 к целому числу, получ [10] , в данном конкретном случае.
Второй вызов Ė
преобразует [10] в [[1, 10]] , а второй Ḍ
окончательно преобразует в [20] .
21 - 30
ṫṣȦJṫȦ⁸ȦJ
Хвост атом ṫ
(диада) выберите постфикс его левый аргумент , который начинается с индексом ( на основе 1 и модульный) , указанная в его правом аргументе, продвигая левый целочисленный аргумент х к [х] . При вызове с обоими аргументами, установленными в 0 , ṫ
возвращает [0] .
Любой и все атом Ȧ
возвращает 1 , если ее аргумент truthy и не содержит нулей на любой глубине, 0 в противном случае. Здесь мы просто используем его как функцию тождественности для возврата неявного аргумента 0 . Раскол в атоме ṣ
разделяет его левый аргумент [0] при появлениях его правого аргумента 0 , поэтому она возвращает [[], []] здесь.
Индексы атом J
отбрасывает элементы возвращаемого значения и заменяет их с индексами, получая диапазон [1, 2] , в этом конкретном случае. Ȧ
и ṫ
оба работают как прежде, поэтому они уменьшают [1, 2] до постфикса, который начинается с последнего индекса, приводя к [2] .
В ниладических ссылках константа ⁸
имеет место [] . Это неразборчивая нилада, то есть она никак не вписывается в цепочку. В результате предыдущее возвращаемое значение ( [2] ) печатается в STDOUT, а затем заменяется значением nilad ( [] ).
Поскольку [] ложно, Ȧ
преобразует его в 0 . J
Атом способствует 0 до [0] , а затем возвращает список своих индексов ( [1] ), который печатается неявно , когда программа заканчивается.
22
Еще один буквальный. Repdigits, кажется, лучшее место, чтобы использовать их.
“@ṃ»
Это использует встроенное сжатие строки Jelly. Индексы @ и ṃ в кодовой странице Jelly равны 64 и 220, а строковые литералы могут содержать 250 различных символов, поэтому сначала вычисляется целое число 250 × 65 + 220 = 16470 .
16470 делится на 3, поэтому частное 16470/3 = 5490 кодирует печатный символ ASCII или перевод строки. Их 96, и 5490 = 96 × 57 + 18 , что означает, что мы декодировали печатный символ ASCII с индексом 18 на основе 0 , который равен «2» .
Нам осталось 57 , что также делится на 3 , поэтому частное 57/3 = 19 = 96 × 0 + 19 кодирует печатаемый символ ASCII с индексом 18 на основе 0 , который равен «3» .
Это оставляет 0 ; процесс декодирования останавливается. Сгенерированные символы объединяются в форму "23"
!ḤḤ!
Факторный атом !
превращает неявный аргумент 0 в 1 . Два вызова unhalve атома Ḥ
превращают 1 в 2 , затем 2 в 4 . Наконец, !
вычисляет 4! = 24 .
³HH
В отсутствие аргументов командной строки константа ³
содержит 100 . Два вызова H
превращают 100 в 50 , затем 50 в 25 .
ØaM
Константа Øa
содержит строчный алфавит. Максимальный атом M
дает все индексы максимальных элементов, а так как г является крупнейшей строчной буквой, результат [26] .
;;;;;;;;;;;;;;;;;;;;;;;;;;;¬¬ḅ¬
Двадцать шесть копий объединенного атома ;
объединяют начальное возвращаемое значение 0 и двадцать шесть экземпляров аргумента по умолчанию 0 , создавая массив из 27 нулей.
¬
является логическим атомом НЕ , поэтому ;¬
добавляет 1 к массиву нулей. Следующий ¬
отменяет все элементы в массиве, оставляя нам массив из 27 единиц и 1 ноль.
ḅ
является необоснованным атомом и преобразует массив цифр из его левого аргумента из базы, указанной в его правом аргументе, в целое число. ḅ¬
преобразует из одинарного в целое число, поэтому он просто выполняет сумму. Для массива из 27 это возвращает 27 .
irið8c
Индекс атома i
способствует его левый аргументу 0 до [0] , а затем найти индекс его правого аргумента 0 в этом массиве, получая 1 .
Диапазон атом r
создает восходящий или нисходящий диапазон от него остался аргумент его правого. Правильный аргумент - это неявный аргумент 0 , так что это приводит к [1, 0] . Второй вызов i
находит индекс 0 в [1, 0] , давая 2 .
ð
начинается новая, диадическая цепь. Поскольку предыдущая цепочка была niladic, левый и правый аргументы этой цепочки будут равны возвращаемому значению первой цепочки ( 2 ). c
в комбинации атом. С левым аргументом 8 и правым аргументом 2 он считает все уникальные неупорядоченные 2-комбинации набора из 8 элементов, возвращая 8C2 = 8! / (6! 2!) = 28 .
⁶ḲĠṂ°İṂĊ
Константа ⁶
содержит пробел и устанавливает аргумент и возвращаемое значение в '' . Слова атом Ḳ
способствует характер «» к одноплодной строке «» и делит его на пространствах, уступая [[], []] .
Группа атомов Ġ
группы все показатели равных элементов. Поскольку оба элемента последнего возвращаемого значения равны, он возвращает [[1, 2]] здесь. Минимальное атом извлекает минимальный (единственный) элемент этого массива, получая [1, 2] .
Степени атом °
преобразует оба целые числа от шестидесятеричных градусов в радианы, получая 1 ° × 2π / 360 ° = p / 180 и 2 ° × 2π / 360 ° = π / 90 . Обратное атом принимает мультипликативные инверсии, получая 180 / л ≈ 57,3 и 90 / П ≈ 28,6 .
Затем Ṃ
еще раз берет минимум, уступая 28,6 . Наконец, атом ceilĊ
превращает 28.6 в 29 .
œṡ¹ẆẆTUṖṖṖṖP
Идентичность атом ¹
возвращает 0 для неявного аргумента 0 . Раскол вокруг атома œṡ
способствует обоих аргументов (как 0 ) до [0] , а затем расщепляется [0] вокруг смежных подрешетки , равным [0] . Это дает [[], []] .
Раздвижное окно атом Ẇ
строит весь смежный подмассив своего аргумента. Первый экземпляр преобразует [[], []] в [[[]], [[]], [[], []]] , второй экземпляр преобразует [[[]], [[]], [[] , []]] в
[[[[]]], [[[]]], [[[], []]], [[[]], [[]]], [[[]], [ [], []]], [[[]], [[]], [[], []]]] .
Правда атом T
перечисляет все показатели truthy элементов. Ни один из массивов на первом уровне не является пустым, поэтому это приводит к [1, 2, 3, 4, 5, 6] . Вверх ногами атом U
изменяет этот массив, получая [6, 5, 4, 3, 2, 1] .
Четыре копии атома popṖ
удаляют последние четыре элемента, оставляя нас с [6, 5] . Наконец, атом продуктаP
превращает этот массив в 30 .
31 - 40
ȷ½RṪ
ȷ
является сокращением для 1 × 10 3 = 1000 . Квадратный корень атом ½
дает 31.6 , которой диапазон атом R
преобразует в [1, ..., 31] . Наконец, хвостовой атом Ṫ
извлекает последний элемент, возвращая 31 .
LµdddddµFL
Длина атома L
способствует неявный аргумент 0 до [0] , а затем принимает длину с получением 1 . µ
запускает новую монадическую цепочку, а результат 1 становится ее аргументом.
Для аргументов х и у , то divmod атом d
выходов [х / у, х% г] . Каждый вызов будет иметь y = 1 , поэтому результат всегда будет [x, 0] .
Первый вызов начинается с x = 1 , что приводит к [1, 0] . d
работает только с целыми числами, поэтому он векторизуется при последующих вызовах. Второй вызов дает [[1, 0], [0, 0]] , третий [[[1, 0], [0, 0]], [[0, 0], [0, 0]]] , и пятый и последний массив глубины 5, который содержит один и 31 ноль.
µ
еще раз запускает новую, монадическую цепочку, а массив до этого становится ее аргументом. Плоский атом F
unnests этого массива, получая плоский массив одного одного и 31 нулей. Наконец, L
берет длину полученного результата, возвращая 32 .
33
Еще один repdigit, еще один буквальный.
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWŒḊ
Каждый экземпляр атома переноса преобразует свой аргумент z в [z] . При начальном возвращаемом значении 0 все 34 экземпляра вместе дают [[[[[[[[[[[[[[[[[[[[[[[[[[[[0]] ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] . Наконец, атом глубиныŒḊ
вычисляет максимальную глубину результирующего массива, возвращая 34 .
ẇɓæ«æ«æ«æ«æ«|æ«|
Окно существует атом ẇ
способствует обоих аргументов (как по умолчанию до 0 ) на [0] , затем проверяет, ** [0] ** происходит как непрерывный подмассива [0] . Это так, поэтому ẇ
возвращает 1 .
ɓ
начинается новая, диадическая цепь. Поскольку предыдущая цепочка была niladic, левый и правый аргументы этой цепочки будут равны возвращаемому значению первой цепочки ( 1 ). Цепочка использует два разных диадических атома: битовое смещение влево ( æ«
) и побитовое ИЛИ ( |
).
Диадическая цепочка, которая начинается с трех или более диад, первоначально вызывает первую диаду с аргументами цепочки. Здесь это дает 1 << 1 = 2 . Шесть последующих диад сгруппированы в пары (так называемые вилки ), где самая правая диада вызывается сначала с аргументами цепочки, затем самая левая вызывается с предыдущими возвращаемыми значениями в обе стороны.
Для æ«æ«
, мы получаем 2 << (1 << 1) = 2 << 2 = 8 . Затем æ«æ«
вычисляет 8 << (1 << 1) = 8 << 2 = 32 . Теперь |æ«
получает нас 32 | (1 << 1) = 32 | 2 = 34 .
Наконец, трейлинг |
действует как ловушка и вызывается с предыдущим возвращаемым значением в качестве левого аргумента и правым аргументом цепочки в качестве правого. Это возвращает 34 | 1 = 35 .
⁹ṚḢ²
При отсутствии второго аргумента константа ⁹
содержит 256 . Обратный атом способствует 256 в массив [2, 5, 6] и переворачивает ее с получением [6, 5, 2] . Затем атом головыḢ
извлекает первый элемент, а квадратный атом ²
возвращает ** 6² = 36 *.
‘‘‘0‘‘‘‘‘‘‘
Приращение атом ‘
увеличивает свой аргумент на 1 , так что ‘‘‘
повернуть начальное значение , возвращаемых 0 в 3 . Следующий 0 - это неразборчивая нилада, то есть он никак не вписывается в цепочку. В результате предыдущее возвращаемое значение ( 3 ) печатается в STDOUT, а затем заменяется значением nilad ( 0 ).
Следующие 7 копий ‘
превращают этот 0 в 7 , который неявно печатается после завершения программы.
’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ạ
Декремент атом ’
декрементирует свой аргумент на 1 , так что тридцать восемь экземпляров провернуть начальное возвращаемое значение 0 в -38 . Абсолютная разница атом ạ
вычисляет без знака разности между -38 и неявным аргументом 0 , возвращающимися 38 .
-____---__________
-
является сокращением для -1 и устанавливает аргумент ссылки и возвращаемое значение равным -1 . Каждый из _
них является экземпляром двоичного атома вычитания , правый аргумент которого по умолчанию будет равен -1, если отсутствует.
Сначала -____-
вычисляется (-1) - (-1) - (-1) - (-1) - (-1) = 3 . Нижеследующее -1 - это неразборчивая нилада, поэтому предыдущее возвращаемое значение ( 3 ) печатается в STDOUT, а затем заменяется значением нилида ( -1 ).
Затем -_
вычисляет (-1) - (-1) = 0 , где литерал -
устанавливает левый аргумент _
и использует возвращаемое значение в качестве правого. Следующие девять копий _
вычитают аргумент по умолчанию -1 из возвращаемого значения, получая 9 , которое выводится неявно по окончании программы.
”(O
”(
является символьным литералом, и порядковый атом O
ищет свою кодовую точку Unicode, получая 40 .
41 - 47
⁵ḶxḶ⁵ị⁵ḶxḶḣṢ
В отсутствие третьего аргумента командной строки константа ⁵
имеет значение 10 . Unlength атом Ḷ
создает диапазон 0 на основе, в частности [0, ..., 9] для аргумента 10 , с обеих сторон повторе в месте атома x
. Последний сопоставляет элементы своего левого аргумента с повторениями своего правого аргумента и повторяет каждый из элементов соответствующее количество раз. Используя [0,…, 9] в качестве левого и правого аргумента, мы получаем ноль нулей, один, два, два и т. Д.
Индекс в атоме ị
извлекает элемент его правого аргумента по индексу , указанному в его левом. С левым аргументом 10 ( ⁵
слева) и правым аргументом [1, 2, 2, 3, 3, 3, 4, 4, 4, 4,…, 9] (предыдущий результат) это дает 4 .
За цепочкой до этой точки следует непарсируемая нилада ⁵
, поэтому предыдущее возвращаемое значение ( 4 ) печатается в STDOUT, возвращаемое значение устанавливается равным 10 , а остальная часть цепочки анализируется как обычно.
Как и прежде, ⁵ḶxḶ
будет давать массив [1, 2, 2, 3, 3, 3, 4, 4, 4, 4,…, 9] . На этот раз мы вызываем отсортированный атом Ṣ
в аргументе 10 , который переводит 10 в [1, 0] , а затем сортирует его для получения [0, 1] . Диадическая головка атом Теперь извлекает префиксы длины 0 и 1 из результата влево, оставляя нас с [[], [1]] . При печати ничего кроме 1 не останется видимым.
⁽{ʂ%⁽{}
⁽
и его два следующих символа составляют числовой литерал. Если j и k являются их кодовыми точками в кодовой странице Jelly и (j, k) <(124, 250) , мы получаем целое число 1001 + 250j + k . Кодовые точки '{' , '}' и 'ʂ' - 123 , 125 и 167 , поэтому левый литерал оценивается в 1001 + 250 × 123 + 167 (= 31918) , а правый - в 1001 + 250 × 123 + 125 (= 31876) .
Поскольку левое целое число менее чем в два раза больше правого, результат составляет (… + 167)% (… + 125) = (… + 167) - (… + 125) = 167–125 = 42 .
ẊẠżv©żvżvżvọ®®Ạżvżvżvọ®
Перетасовка атом Ẋ
рандомизирует порядок элементов своего аргумента; числовой аргумент z заранее повышается до диапазона [1,…, z] . Для неявного аргумента 0 этот диапазон пуст и Ẋ
приводит к [] . Все атом Ạ
возвращает 1 , если все элементы ее аргумента являются truthy, 0 , если нет. Поскольку пустой массив не содержит ложных элементов, здесь Ạ
возвращается 1 .
Индекс с атомом ż
(диада) принимает аргументы x и y и транспонирует пару [x, y] . Для целых чисел x и y это просто возвращает [[ x, y]] , поэтому этот конкретный объект ż
, вызываемый с аргументами 1 и 0 (неявный аргумент), возвращает [[1, 0]] . Диадический Eval атом v
превращает все плоские массивы (содержащие только цифру и символы) Я левый аргумент в строки, а затем оценивает результирующие строки как монадическая программа Желе с правым аргументом в качестве аргументов программ. С ["10"]состоит только из литералов, это игнорирует правильный аргумент v
и просто приводит к [10] .
Копия быстро ©
присоединяет к v
и копирует его результат в регистр. Более поздние вхождения атома отзыва®
(nilad) будут извлекать [10] из регистра.
Следующие три экземпляра żv
работы, как и прежде, отображают [10] в [[10, 0] в [100] в… в [10000] . На заказ атомных ọ
испытаний , сколько раз его левый аргумент делится на его правой, так вот, он вычисляет порядок 10 (сгружен с ®
) в 10000 = 10 4 , получая [4] .
Ниже ®
приведена неразборчивая nilad, поэтому предыдущее возвращаемое значение ( [4] ) печатается в STDOUT, а затем заменяется значением nilad ( 10 ). Применяем Ạ
далее, получая 1 . (Это необходимо, так как на этом этапе будет разбираться нилада, за которым следует диада.)
Как и прежде, żvżvżv
добавляет три нуля к текущему возвращаемому значению, превращая 1 в [1000] . И, наконец, ọ®
вычисляет порядок 10 в 1000 = 10 3 , и 3 выводится на STDOUT , когда программа заканчивается.
44
Еще один репигит, еще один буквальный.
111111l11&K1111111Kl11&
Прежде всего, литерал 111111
устанавливает аргумент и начальное возвращаемое значение равным 111111 . Другие серии 1
также являются литералами.
l
является логарифмическим атомом, который вычисляет логарифм левого аргумента с основанием, указанным в правом. При вызове 111111 с правильным аргументом 11 мы получаем журнал 11 111111 ≈ 4.85 .
Слова атом K
присоединяется список аргументов в пространствах, после продвижения числового / символа г в [г] . Здесь мы просто используем его, чтобы превратить аргумент ссылки 111111 в [111111] . (Здесь нам не требуется массив, но у нас закончились атомы идентичности.) Побитовый атом AND&
принимает возвращаемые значения в обе стороны, при необходимости возвращает их к целому числу и вычисляет их побитовое AND. В этом конкретном случае он возвращает [4.85 & 111111] = [4 & 111111] = [4] .
Ниже 1111111
приведена неразборчивая nilad, поэтому предыдущее возвращаемое значение ( [4] ) печатается в STDOUT, а затем заменяется значением nilad ( 1111111 ). K
затем превращает это целое число в [1111111] . (Это опять-таки не обязательно, но на этом этапе можно разобрать ниладу, за которой следует диада.)
Как и прежде, l11
вычисляет log 11 1111111 ≈ 5.81 , затем &
возвращает [5.81 & 111111] = [5 & 111111] = [5] .
,SS
ỊỊ,ÇS
ÇÑÇÇÇÑ
Это единственная программа, которая состоит из нескольких пользовательских ссылок. Последняя ссылка является основной и выполняется при запуске программы, остальные - вспомогательные. Быстрый Ç
всегда ссылается на ссылку выше текущей и выполняет ее монадически. Аналогично, быстрое Ñ
всегда ссылается на ссылку под текущей (обтекание), а также выполняет ее монадически.
Верхняя ссылка состоит из парного атома ,
- диады, которая превращает аргументы x и y в [x, y] - и атома суммыS
- монады, которая переводит целочисленный аргумент z в [z] и уменьшает аргумент массива путем сложения. Когда ссылка ,SS
вызывается с целочисленным аргументом n , она вычисляет Σ [n, Σn] = Σ [n, n] = 2n .
Средняя связь состоит из вышеуказанных атомов, вышеупомянутого быстрого Ç
и незначительного атома Ị
- монады, которая дает 1 для числовых аргументов z с -1 ≤ z ≤ 1 , но 0 для всех остальных. Применение Ị
дважды к целочисленному аргументу n по существу заменяет его на 1 , так как вывод первого Ị
( ввод второго) всегда незначителен. Этот результат затем соединяется с возвращаемым значением Ç
( вызывается с аргументом n ), и результирующая пара уменьшается на S
. В общей сложности мы вычисляемΣ [(| n | ≤ 1) ≤ 1, 2n] = Σ [1, 2n] = 2n + 1 .
С этими двумя вспомогательными ссылками основная ссылка теперь может создавать любое неотрицательное целое число, просматривая его двоичные цифры. При начальном возвращаемом значении 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
Следующий простой атом находит наименьшее положительное простое число, которое строго больше , чем ее аргумент. С начальным возвращаемым значением 0 пятнадцать вызовов Æn
вычисляют пятнадцатое простое число, которое равно 47 .