ÆlÐĿĊḊi1
オンラインでお試しください!または、すべてのテストケースを確認します。
バックグラウンド
結果が変化しなくなるまで、入力の自然対数と後続の結果を連続して取得することから始めます。これが機能するのは、自然対数の複素平面への拡張には固定小数点があるためです。if z = e -W(-1) ≈0.318 + 1.337i –ここで、WはランバートW関数を示します – log(z)= zです。
入力nの場合、[n、log(n)、log(log(n))、…、z]を計算した後、まず各結果にシーリング関数を適用します。Jellyの実装(Ċ
)は実際に複素数の虚数部を代わりに計算します†、とにかくこれらには興味がありません。
後のk 番目のアプリケーションログは以下の値が得られるか、に等しい1、Ċ
戻ります1を初めて。その最初の1の0から始まるインデックスが望ましい結果です。
単純な実装(計算1ベースのインデックス、デクリメント)は、エッジケース0のために失敗します。これは、対数のリストに1がありません。実際、入力0の場合、対数のシーケンスは
[0, None]
これは、Jellyの対数(Æl
)が過負荷になっているためです。最初にmath.log
(実際の対数)を試み、次にcmath.log
(複素数の対数)を試み、最後に「あきらめて」を返しますNone
。幸いなことに、Ċ
同様にオーバーロードされ、切り上げまたは虚数部を取得できない場合は、単に引数を返します。
同様に、入力1は戻ります
[1, 0, None]
それはかかわらない他のアプローチで問題を作成するかもしれませんĊ
。
この問題を解決する1つの方法はḊ
、対数の配列に適用(デキュー、最初の要素を削除)です。この地図
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).
† これは、ゼリーの中で明白でない方法で過負荷になっている3つの原子の1つです。