ÆlÐĿĊḊi1
Pruébalo en línea! o verificar todos los casos de prueba .
Fondo
Comenzamos tomando sucesivamente logaritmos naturales de la entrada y los resultados posteriores hasta que el resultado ya no cambie. Esto funciona porque la extensión del logaritmo natural al plano complejo tiene un punto fijo ; si z = e -W (-1) ≈ 0.318 + 1.337i - donde W denota la función Lambert W - tenemos log (z) = z .
Para la entrada n , después de calcular [n, log (n), log (log (n)),…, z] , primero aplicamos la función de techo a cada uno de los resultados. La implementación de Jelly ( Ċ
) en realidad calcula la parte imaginaria del número complejo en su lugar † , pero de todos modos no estamos interesados en esto.
Una vez que el k ésimo aplicación de registro se obtiene un valor menor que o igual a 1 , Ċ
devolverá 1 por primera vez. El índice basado en 0 de ese primer 1 es el resultado deseado.
La implementación sencilla (calcular el índice basado en 1, decremento) falla debido al caso límite 0 , que no tiene un 1 en su lista de logaritmos. De hecho, para la entrada 0 , la secuencia de logaritmos es
[0, None]
Esto se debe a que el logaritmo de Jelly ( Æl
) está sobrecargado; primero intenta math.log
(logaritmo real), luego cmath.log
(logaritmo complejo) y finalmente "se rinde" y regresa None
. Afortunadamente, Ċ
se sobrecarga de manera similar y simplemente le devuelve el argumento si no puede redondear o tomar una parte imaginaria.
Del mismo modo, la entrada 1 devuelve
[1, 0, None]
lo cual puede crear problemas en otros enfoques que involucran o no Ċ
.
Una forma de solucionar este problema es aplicar Ḋ
(eliminar; elimina el primer elemento) a la matriz de logaritmos. Este mapas
0ÆlÐĿ -> [0, None] -> [None]
1ÆlÐĿ -> [1, 0, None] -> [0, None]
entonces ninguna de las listas tiene un 1 ahora. De esta manera, encontrar el índice del primer 1 devolverá 0 (no encontrado), que es la salida deseada para las entradas 0 y 1 .
Cómo funciona
Æ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).
† Este es uno de los únicos tres átomos en Jelly que están sobrecargados de una manera no obvia.