JḟÐ € `ị⁸Ṃ €
ṙJṖ € Ṃ €
ṙJṖ «/ аргумент: 1D массив (z)
J [1,2,3, ..., len (z)]
z повернуть z на каждую из указанных выше величин (текущий массив 2D)
Ṗ удалить последний массив
«/ Уменьшить на [имплицитно векторизованный] минимум
Попробуйте онлайн!
Проверьте все из них сразу! (слегка модифицированный)
Я почти уверен, что Деннис может обыграть это.
Как это работает
Алгоритм довольно запутанный. Давайте посмотрим, что это значит [4,2,2,5]
.
Во-первых, мы используем J
для получения [1,2,3,4]
. Обратите внимание, что Jelly использует 1-индексирование.
Затем мы видим ṙ
. Он принимает два аргумента: массив и целое число. Он поворачивает массив влево на величину, указанную целым числом. Здесь можно ṙ
было бы увидеть [4,2,2,5]
его слева и [1,2,3,4]
справа (больше о том, как это работает, можно найти в руководстве ). В Jelly команды неявно векторизуются. Следовательно, эта команда будет выполняться над каждым отдельным элементом справа, поэтому мы должны создать двумерный массив:
Следовательно, [4,2,2,5]ṙ[1,2,3,4]
становится [[4,2,2,5]ṙ1,[4,2,2,5]ṙ2,[4,2,2,5]ṙ3,[4,2,2,5]ṙ4]
, что становится:
[[2,2,5,4],
[2,5,4,2],
[5,4,2,2],
[4,2,2,5]]
Обратите внимание, что исходные элементы находятся в последней строке, поскольку в этой строке мы повернули влево на величину, равную длине массива, поэтому мы используем Ṗ
next для удаления этой строки, чтобы столбцы были коллекциями элементы массива, которых нет в текущем индексе:
[[2,2,5,4],
[2,5,4,2],
[5,4,2,2]]
Следующая операция, «/
также довольно запутанная. Во-первых, «
возвращает минимум двух чисел, которые он видит слева и справа. Например, 5«3
возвращает 3
. Теперь, если два аргумента являются массивами, то он будет векторизован, как я сказал выше. Что это значит, [1,5,2,3]«[4,1,5,2]
что станет тем, [1«4,5«1,2«5,3«2]
что есть [1,1,2,2]
. Теперь, /
это reduce
означает, что мы делаем операцию над каждой строкой до конца. Например, [1,2,3,4]+/
стал бы ((1+2)+3)+4
, который является суммой массива [1,2,3,4]
.
Итак, если мы применим «/
к только что полученному 2D-массиву, мы получим:
([2,2,5,4]«[2,5,4,2])«[5,4,2,2]
который из-за векторизации будет эквивалентен:
[2«2«5,2«5«4,5«4«2,4«2«2]
который вычисляет минимум каждого массива без элемента в индексе.
[4 3 2 2 5]
выводить?