ÆlÐĿĊḊi1
Provalo online! o verifica tutti i casi di test .
sfondo
Iniziamo prendendo successivamente logaritmi naturali dell'input e dei risultati successivi fino a quando il risultato non cambia più. Questo funziona perché l'estensione del logaritmo naturale al piano complesso ha un punto fisso ; se z = e -W (-1) ≈ 0,318 + 1.337i - dove W indica la funzione Lambert W - abbiamo log (z) = z .
Per l'input n , dopo aver calcolato [n, log (n), log (log (n)), ..., z] , applichiamo innanzitutto la funzione soffitto a ciascuno dei risultati. L'implementazione di Jelly ( Ċ
) in realtà calcola invece la parte immaginaria del numero complesso † , ma non ci interessa comunque.
Una volta che il k esima applicazione di registro produce un valore inferiore o uguale a 1 , Ċ
restituirà 1 per la prima volta. L'indice basato su 0 di quel primo 1 è il risultato desiderato.
L'implementazione semplice (indice basato sul calcolo 1, decremento) non riesce a causa del caso limite 0 , che non ha un 1 nel suo elenco di logaritmi. In effetti, per l'ingresso 0 , la sequenza dei logaritmi è
[0, None]
Questo perché il logaritmo di Jelly ( Æl
) è sovraccarico; prima prova math.log
(logaritmo reale), poi cmath.log
(logaritmo complesso), e infine "si arrende" e ritorna None
. Fortunatamente, Ċ
è sovraccarico in modo simile e restituisce semplicemente argomento se non può arrotondare o prendere una parte immaginaria.
Allo stesso modo, l'ingresso 1 ritorna
[1, 0, None]
che può creare problemi in altri approcci che coinvolgono o meno Ċ
.
Un modo per risolvere questo problema è applicare Ḋ
(dequeue; rimuove il primo elemento) all'array di logaritmi. Questa mappa
0ÆlÐĿ -> [0, None] -> [None]
1ÆlÐĿ -> [1, 0, None] -> [0, None]
quindi nessuna delle liste ha un 1 ora. In questo modo, trovando l'indice del primo 1 restituirà 0 (non trovato), che è l'uscita desiderata per gli ingressi 0 e 1 .
Come funziona
Æ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).
† Questo è uno dei soli tre atomi in Jelly che sono sovraccarichi in modo non ovvio.