ÆlÐĿĊḊi1
Essayez-le en ligne! ou vérifiez tous les cas de test .
Contexte
Nous commençons par prendre successivement les logarithmes naturels de l'entrée et des résultats suivants jusqu'à ce que le résultat ne change plus. Cela fonctionne parce que l'extension du logarithme naturel au plan complexe a un point fixe ; si z = e -W (-1) ≈ 0,318 + 1,337i - où W désigne le fonction Lambert W - nous avons log (z) = z .
Pour l'entrée n , après avoir calculé [n, log (n), log (log (n)),…, z] , nous appliquons d'abord la fonction de plafond à chacun des résultats. L'implémentation de Jelly ( Ċ
) calcule en fait la partie imaginaire du nombre complexe † , mais cela ne nous intéresse pas de toute façon.
Une fois que la k ème application de log donne une valeur inférieure ou égale à 1 , Ċ
renvoie 1 pour la première fois. L'index basé sur 0 de ce premier 1 est le résultat souhaité.
L'implémentation simple (calcul de l'index basé sur 1, décrémentation) échoue en raison du cas de bord 0 , qui n'a pas de 1 dans sa liste de logarithmes. En fait, pour l'entrée 0 , la séquence de logarithmes est
[0, None]
C'est parce que le logarithme de Jelly ( Æl
) est surchargé; il essaie d'abord math.log
(logarithme réel), puis cmath.log
(logarithme complexe), et finalement "abandonne" et revient None
. Heureusement, il Ċ
est également surchargé et renvoie simplement son argument s'il ne peut pas arrondir ou prendre une partie imaginaire.
De même, l'entrée 1 renvoie
[1, 0, None]
ce qui peut créer des problèmes dans d'autres approches qui impliquent ou non Ċ
.
Une façon de résoudre ce problème est d'appliquer Ḋ
(retirer la file d'attente; supprime le premier élément) au tableau de logarithmes. Cette carte
0ÆlÐĿ -> [0, None] -> [None]
1ÆlÐĿ -> [1, 0, None] -> [0, None]
donc aucune des listes n'a un 1 maintenant. De cette façon, trouver l'index du premier 1 retournera 0 (non trouvé), qui est la sortie souhaitée pour les entrées 0 et 1 .
Comment ça marche
Æ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).
† C'est l'un des trois seuls atomes de Jelly qui sont surchargés de manière non évidente.