ÆlÐĿĊḊi1
Experimente online! ou verifique todos os casos de teste .
fundo
Começamos sucessivamente tomando logaritmos naturais da entrada e dos resultados subsequentes até que o resultado não seja mais alterado. Isso funciona porque a extensão do logaritmo natural ao plano complexo tem um ponto fixo ; se z = e -W (-1) ≈ 0,318 + 1,337i - onde W denota a função Lambert W -, temos log (z) = z .
Para a entrada n , após calcular [n, log (n), log (log (n)),…, z] , primeiro aplicamos a função de teto a cada um dos resultados. A implementação de Jelly ( Ċ
) na verdade calcula a parte imaginária do número complexo † , mas não estamos interessados nisso de qualquer maneira.
Uma vez que a k- ésima aplicação do log produza um valor menor ou igual a 1 , Ċ
retornará 1 pela primeira vez. O índice baseado em 0 desse primeiro 1 é o resultado desejado.
A implementação direta (cálculo com base no índice 1, decremento) falha devido ao caso 0 de borda , que não possui um 1 em sua lista de logaritmos. De fato, para a entrada 0 , a sequência de logaritmos é
[0, None]
Isso ocorre porque o logaritmo de Jelly ( Æl
) está sobrecarregado; primeiro tenta math.log
(logaritmo real), depois cmath.log
(logaritmo complexo) e finalmente "desiste" e retorna None
. Felizmente, Ċ
está sobrecarregado de maneira semelhante e simplesmente retorna o argumento se não puder arredondar ou assumir uma parte imaginária.
Da mesma forma, a entrada 1 retorna
[1, 0, None]
o que pode criar problemas em outras abordagens que envolvem ou não Ċ
.
Uma maneira de corrigir esse problema é aplicar Ḋ
(desenfileirar; remove o primeiro elemento) à matriz de logaritmos. Este mapeia
0ÆlÐĿ -> [0, None] -> [None]
1ÆlÐĿ -> [1, 0, None] -> [0, None]
então nenhuma lista tem 1 agora. Dessa forma, encontrar o índice do primeiro 1 retornará 0 (não encontrado), que é a saída desejada para as entradas 0 e 1 .
Como 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 é um dos únicos três átomos em Jelly sobrecarregados de uma maneira não óbvia.