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]выводить?