ÆlÐĿĊḊi1
Спробуйте в Інтернеті! або перевірити всі тестові випадки .
Фон
Почнемо з послідовного взяття природних логарифмів введення та подальших результатів, поки результат більше не зміниться. Це працює тому, що розширення природного логарифму до складної площини має фіксовану точку ; якщо z = e -W (-1) ≈ 0,318 + 1,333i - де W позначає функцію Ламберта W - маємо log (z) = z .
Для введення n , після обчислення [n, log (n), log (log (n)),…, z] , ми спочатку застосовуємо функцію стелі до кожного з результатів. Реалізація Jelly ( Ċ
) насправді обчислює уявну частину складного числа замість † , але нас це все одно не цікавить.
Як тільки k- е застосування журналу дасть значення менше або дорівнює 1 , Ċ
поверне 1 вперше. 0-індекс цього першого 1 є бажаним результатом.
Безпосередня реалізація (обчислювальний індекс, декремент) не вдається через крайній випадок 0 , який не має 1 у своєму списку логарифмів. Насправді для введення 0 послідовність логарифмів є
[0, None]
Це тому, що логарифм Джеллі ( Æl
) перевантажений; він спочатку намагається math.log
(справжній логарифм), потім cmath.log
(складний логарифм) і, нарешті, "здається" і повертається None
. На щастя, Ċ
аналогічно перевантажений і просто повертає його аргумент, якщо він не може зібрати або взяти уявну участь.
Так само повертається вхід 1
[1, 0, None]
які можуть створювати проблеми в інших підходах, які не стосуються або не передбачають Ċ
.
Один із способів вирішити цю проблему - застосувати Ḋ
(dequeue; видаляє перший елемент) до масиву логарифмів. Це карти
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).
† Це один з єдиних трьох атомів в желе, які перевантажуються неочевидним чином.