)K`0
"$+"+¶<`.+
$.(*__2*$-1*
Попробуйте онлайн!
На основе 0, поэтому вход n дает первое n + 1 результаты.
объяснение
Использует рекурсию из OEIS:
a(n) = a(n-1) + 2*a(n-2) + 1
Давайте пройдемся по программе:
)K`0
Это постоянный этап: он отбрасывает ввод и устанавливает рабочую строку в 0
качестве начального значения последовательности. )
Обертывает эту стадию в группе. Эта группа сама по себе ничего не делает, но почти каждый этап (включая групповые этапы) записывает свой результат в журнал, и нам потребуется две копии 0
этого журнала для работы программы.
"$+"+¶<`.+
$.(*__2*$-1*
Здесь есть куча настроек: "$+"+
оборачивает сцену в цикл. Значение "$+"
рассматривается как замена и $+
относится к входу программы, т.е. n . Это означает, что цикл запущен n раз.
Затем ¶<
оборачивает каждую итерацию в выходной этап, который печатает входные данные этапа с завершающим переводом строки (поэтому первая итерация печатает ноль, вторая итерация печатает результат первой итерации и т. Д.).
Сам этап заменяет всю рабочую строку с подстановкой в последней строке. Тот использует неявные закрывающие скобки и неявные аргументы для оператора повторения *
, так что на самом деле это сокращение от:
$.($&*__2*$-1*_)
Материал внутри скобок можно разбить на три части:
$&*_
: дает строку из (n-1) _
s.
_
: дает сингл _
.
2*$-1*_
: дает строку 2 * a (n-1) _
. $-1
Относится к результату предпоследнего в журнале результата, т.е. итерации цикла до последнего. Вот почему нам нужно было сначала скопировать ноль в журнале, иначе это будет относиться к вводу программы на первой итерации.
Затем $.(…)
измеряет длину полученной строки. Другими словами, мы вычислили a(n) = a(n-1) + 1 + 2*a(n-2)
, пройдя через унарный (хотя на самом деле это не так:$.(…)
он ленив и фактически не оценивает его содержимое, если он может определить результирующую длину непосредственно с помощью арифметики, так что это даже довольно эффективно).
Результат последней итерации цикла ( n + 1- й элемент последовательности) печатается из-за неявного вывода Retina в конце программы.