ÆlÐĿĊḊi1
Попробуйте онлайн! или проверьте все контрольные примеры .
Задний план
Мы начинаем с последовательного получения натуральных логарифмов входных данных и последующих результатов, пока результат не перестанет меняться. Это работает, потому что расширение натурального логарифма на комплексную плоскость имеет фиксированную точку ; если z = e -W (-1) ≈ 0.318 + 1.337i - где W обозначает функцию W Ламберта - мы имеем log (z) = z .
Для ввода n , после вычисления [n, log (n), log (log (n)),…, z] , мы сначала применяем функцию потолка к каждому из результатов. Реализация Jelly ( Ċ
) на самом деле вместо этого вычисляет мнимую часть комплексного числа † , но мы все равно не заинтересованы в этом.
Как только k- е приложение log выдаст значение, меньшее или равное 1 , Ċ
вернет 1 в первый раз. Основанный на 0 индекс этого первого 1 является желаемым результатом.
Простая реализация (вычисление на основе индекса 1, декремент) завершается неудачей из-за граничного случая 0 , который не имеет 1 в своем списке логарифмов. На самом деле, для входа 0 последовательность логарифмов
[0, None]
Это потому, что логарифм Jelly ( Æl
) перегружен; сначала он пытается math.log
(реальный логарифм), затем cmath.log
(сложный логарифм) и, наконец, «сдается» и возвращается None
. К счастью, Ċ
аналогичным образом перегружается и просто возвращает аргумент, если не может округлить или принять мнимую часть.
Аналогично, ввод 1 возвращает
[1, 0, None]
которые могут создавать проблемы в других подходах, которые включают или не включают Ċ
.
Один из способов решения этой проблемы - применить Ḋ
(удалить из очереди; удаляет первый элемент) к массиву логарифмов. Это карты
0ÆlÐĿ -> [0, None] -> [None]
1ÆlÐĿ -> [1, 0, None] -> [0, None]
так что ни один список не имеет 1 сейчас. Таким образом, поиск индекса первого 1 вернет 0 (не найдено), что является желаемым выходом для входов 0 и 1 .
Как это работает
ÆlÐĿĊḊi1 Main link. Argument: n (non-negative integer)
ÐĿ Apply the following link until the results are no longer unique.
Æl Natural logarithm.
Return the array of all unique results.
Ċ Round all resulting real numbers up to the nearest integer. This takes
the imaginary part of complex numbers and does nothing for non-numbers.
Ḋ Dequeue; remove the first item (n) of the array of results.
i1 Find the first index of 1 (0 if not found).
† Это один из трех атомов в желе, которые перегружены неочевидным образом.