ÆlÐĿĊḊi1
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Hintergrund
Wir beginnen damit, nacheinander natürliche Logarithmen der Eingabe und der nachfolgenden Ergebnisse zu verwenden, bis sich das Ergebnis nicht mehr ändert. Dies funktioniert, weil die Ausdehnung des natürlichen Logarithmus auf die komplexe Ebene einen festen Punkt hat . wenn z = e - W (-1) ≤ 0,318 + 1,337i - wobei W die Lambert - W - Funktion bezeichnet - haben wir log (z) = z .
Für die Eingabe n wenden wir nach der Berechnung von [n, log (n), log (log (n)), ..., z] zunächst die Deckenfunktion auf jedes der Ergebnisse an. Jellys Implementierung ( Ċ
) berechnet stattdessen den Imaginärteil der komplexen Zahl † , was uns jedoch sowieso nicht interessiert.
Sobald der k - te Anwendung der log einen Wert kleiner als oder gleich ergibt 1 , Ċ
kehrt 1 zum ersten Mal. Der auf 0 basierende Index dieser ersten 1 ist das gewünschte Ergebnis.
Die unkomplizierte Implementierung (1-basierten Index berechnen, dekrementieren) schlägt fehl, da der Kantenfall 0 keine 1 in der Liste der Logarithmen enthält. Tatsächlich ist für den Eingang 0 die Reihenfolge der Logarithmen
[0, None]
Dies liegt daran, dass der Logarithmus von Jelly ( Æl
) überladen ist. es versucht zuerst math.log
(realer Logarithmus), dann cmath.log
(komplexer Logarithmus) und gibt schließlich "auf" und kehrt zurück None
. Glücklicherweise Ċ
ist es ähnlich überladen und gibt einfach das Argument zurück, wenn es nicht aufrunden oder einen imaginären Teil übernehmen kann.
Ebenso wird Eingang 1 zurückgegeben
[1, 0, None]
Dies kann bei anderen Ansätzen zu Problemen führen Ċ
.
Eine Möglichkeit, dieses Problem zu beheben, besteht darin Ḋ
, das Array von Logarithmen zuzuweisen (aus der Warteschlange zu entfernen; erstes Element zu entfernen). Diese Karten
0ÆlÐĿ -> [0, None] -> [None]
1ÆlÐĿ -> [1, 0, None] -> [0, None]
Daher hat keine der Listen jetzt eine 1 . Auf diese Weise, den Index der ersten Auffinden 1 zurückkehren wird 0 (nicht gefunden), die die gewünschte Ausgabe für die Eingänge 0 und 1 .
Wie es funktioniert
Æ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).
† Dies ist eines der wenigen Atome in Jelly, die auf nicht offensichtliche Weise überladen sind.