O desafio
Muito simples, considerando uma entrada x
, calcule sua torre de energia infinita!
x^x^x^x^x^x...
Para vocês, amantes da matemática, essa é x
a infinita tetração .
Lembre-se do seguinte:
x^x^x^x^x^x... = x^(x^(x^(x^(x...)))) != (((((x)^x)^x)^x)^x...)
Surpreendido, não tivemos um desafio "simples" de matemática envolvendo isso! *
Suposições
x
vai sempre convergem.- Números negativos e complexos devem poder ser manipulados
- Isso é código-golfe , então os bytes mais baixos vencem!
- Suas respostas devem estar corretas com pelo menos 5 casas decimais
Exemplos
Input >> Output
1.4 >> 1.8866633062463325
1.414 >> 1.9980364085457847
[Square root of 2] >> 2
-1 >> -1
i >> 0.4382829367270323 + 0.3605924718713857i
1 >> 1
0.5 >> 0.641185744504986
0.333... >> 0.5478086216540975
1 + i >> 0.6410264788204891 + 0.5236284612571633i
-i >> 0.4382829367270323 -0.3605924718713857i
[4th root of 2] >> 1.239627729522762
* (Além de um desafio mais complicado aqui )
Respostas:
APL (Dyalog) , 4 bytes
Experimente online!
*
poder⍣
até≡
estável⍨
selfiefonte
Pitão,
43 bytesriscado 4 ainda é regular 4; (
Experimente online
Como funciona
fonte
G
, ele será preenchido automaticamente.Haskell ,
10063 bytesPara entradas que não convergem (por exemplo
-2
), isso não termina:Muito obrigado @ ØrjanJohansen por me ensinar
until
e me salvar37
bytes!Experimente online!
fonte
until
função Experimente online!until
, muito obrigado.Python 3 ,
40 3935 bytesd>99
vez ded==99
: mais 1 iteração para uma contagem menor de bytesx**True
avalia x emx**(d>99or g(x,d+1))
. A expressão no termo é avaliada como True para profundidade maior que 99 e, portanto, retorna o valor passado.Lambda recursiva com profundidade máxima 100, isto é, para profundidade 100, retorna o mesmo valor. Na verdade, é independente da convergência, portanto, espere o inesperado para números com valores não convergentes para a função.
Experimente online!
fonte
complex('j')
por1j
d>99
faz mais uma iteração e é mais curto.g=lambda x,d=0:x**(d>99or g(x,d+1))
,x**True
avalia parax
Python 3,
373027 bytes-7 bytes de @FelipeNardiBatista.
-3 bytes de @xnor
Não lembro mais muito de Python, mas consegui portar minha resposta em Ruby e vencer a outra resposta em Python 3: D
Experimente online!
fonte
x
,eval('x**'*99+'1')
funciona #Mathematica, 12 bytes
Pega um número de ponto flutuante como entrada.
fonte
J , 5 bytes
Experimente online!
Explicação
Primeiro, mostrarei qual comando está sendo executado após analisar
~
o final, e o passo a passo será para o novo verbo.fonte
(^^:_)
cria um novo verbo diádico via power conj, então o auto-advérbio~
torna esse verbo monádico, de modo que, quando dado um argumento,x
ele é expandidox (^^:_) x
. a esquerdax
subseqüentemente "gruda", dando((x&^)^:_) x
sua nota, e somente o argumento correto é alterado durante a iteração?x u^:n y
o argumento da esquerda é vinculado à díade para formar uma mônada que é aninhada váriasn
vezesy
.x u^:n y -> (x&u)^:n y -> (x&u) ... n times ... (x&u) y
C # (.NET Core) ,
7978 bytesExperimente online!
Eu escolhi iterar até
i
= 999 porque, se eu iterasse até 99, alguns exemplos não alcançariam a precisão necessária. Exemplo:Como você pode ver, após 99 iterações, a parte imaginária falhou na quinta casa decimal.
Nesse caso, após 99 iterações, obtemos a precisão esperada. Na verdade, eu poderia iterar até
i
= 1e9 com a mesma contagem de bytes, mas isso tornaria o código consideravelmente mais lentofonte
Gelatina , 5 bytes
Experimente online!
fonte
Ruby,
2120 bytesIsenção de responsabilidade : Parece que Ruby retorna alguns valores estranhos ao elevar um número complexo a uma potência. Suponho que esteja fora do escopo desse desafio corrigir o módulo de matemática inteiro de Ruby, mas, caso contrário, os resultados dessa função devem estar corretos.Edit : Aplicadas as alterações mais recentes da minha resposta do Python 3 e de repente, de alguma forma, dá os mesmos resultados esperados :)Experimente online!
fonte
eval
."0+1i**0+1i**0+1i**..."
, que analisa da maneira errada, pois**
tem precedência maior que+
.#inspect
e#to_s
retornar valores diferentes. Antes de enviar a resposta inicial, fiz alguns testes no irb e vi que, por exemplo, entrarComplex(1,2)
no REPL daria(1+2i)
, incluindo os parênteses. Ao restringir o valor, no entanto, os parênteses não são incluídos; portanto, a precedência, como você indica, estragou tudo.eval
uso era proibido.TI-BASIC, 16 bytes
A entrada e saída são armazenadas em
Ans
.fonte
R ,
3633 bytes- 3 bytes graças a Jarko Dubbeldam
Lê de stdin.
Reduce
s da direita para obter os expoentes aplicados na ordem correta.Experimente (função)
Experimente (stdin)
fonte
scan(,1i)
trabalho. Semelhante a comoscan(,'')
funciona.Javascript, 33 bytes
fonte
MATL ,
2010 bytesreduzido a metade graças a @LuisMendo
Experimente online!
Esta é minha primeira code-golf e minha primeira vez usando MATL, então eu tenho certeza que poderia ser facilmente superada.
fonte
XII
é equivalente at
. Você também pode se livrarXH
eH
usar a área de transferência automáticaM
, ou sejattt^`yw^t5M-]bb-x
,. E na última parte, em vez de excluir os valores indesejados que você pode usar&
, o que instrui a função de exibição implícita a mostrar apenas o topo. Então, você pode usarttt^`yw^t5M-]&
e salvar alguns bytes.t
não é necessário, e usandoG
em vez de outrot
você pode evitar&
e, assim, deixar]
implícito:t^`Gw^t5M-
. Ei, reduzimos a contagem de bytes pela metade!Perl 6 , 17 bytes
Experimente online!
R**
é o operador de exponenciação reversa;x R** y
é igual ay ** x
.[R**]
reduz uma lista de 999 cópias do argumento de entrada com exponenciação reversa.fonte