무한 파워 타워


22

도전

입력이 주어지면 매우 간단합니다. x무한 전력 타워입니다!

x^x^x^x^x^x...

수학 애호가에게는 이것이 x무한한 테트라 션 입니다.

다음을 명심하십시오.

x^x^x^x^x^x... = x^(x^(x^(x^(x...)))) != (((((x)^x)^x)^x)^x...)

우리는 이것과 관련된 "간단한"수학 과제를 겪지 않은 것에 놀랐습니다! *

가정

  • x것입니다 항상 수렴.
  • 음수와 복소수 를 처리 할 수 ​​있어야합니다
  • 이것은 이므로 가장 낮은 바이트가 이깁니다!
  • 답은 소수점 5 자리 이상이어야 합니다.

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

* ( 여기서 더 복잡한 도전 이외 )


1
이 타워가 x = -2 또는 x = -0.5 에서 수렴한다고 생각하지 않습니다 .
Anders Kaseorg

@AndersKaseorg 동의하지만 모든 프로그램에 동일한 수렴 답변이있는 것 같습니다. 왜 수렴하지 않습니까?
Graviton

2
x = -2는 8주기에 끌리고 x = -0.5는 6주기에 ​​끌립니다. (이 경우 내 프로그램은 여전히 ​​답을 제공하지만 고정 된 점이 아니라주기의 요점 중 하나입니다. 이것은 수렴을 나타내는 것이 아닙니다.)
Anders Kaseorg

@AndersKaseorg Aha는 매우 흥미 롭습니다. 왜 -2에 대해 '8'을, -0.5에 대해 '6'을 알지 못합니까? 물론 호기심에서.
Graviton

2
당신은 쉽게 내가 할 수와 반복을 실행할 수 있지만 여기 사진입니다 : commons.wikimedia.org/wiki/File:Tetration_period.png
앤더스 Kaseorg

답변:




7

하스켈 , 100 63 바이트

수렴하지 않는 입력 (예 :)의 -2경우 종료되지 않습니다.

import Data.Complex
f x=until(\a->magnitude(a-x**a)<1e-6)(x**)x

바이트를 until저에게 가르쳐주고 저를 구해준 @ ØrjanJohansen에게 감사드립니다 37!

온라인으로 사용해보십시오!


1
until함수를 사용하면 이것을 많이 줄일 수 있습니다 . 온라인으로 사용해보십시오!
Ørjan Johansen

산뜻한! 몰랐어요 until, 고마워요.
ბიმო

7

파이썬 3 , 40 39 35 바이트

  • 바이트에 대해 @ Ørjan Johansen에게 감사드립니다. d>99대신 d==99: 적은 바이트 수에 대해 1 회 더 반복하십시오.
  • 4 바이트에 대한 @Uriel에게 감사드립니다 : x**Truex in 평가 하는 사실의 현명한 활용 x**(d>99or g(x,d+1)). 용어의 표현식은 99보다 큰 깊이에 대해 True로 평가되므로 전달 된 값을 반환합니다.

최대 깊이 100, 즉 깊이 100의 재귀 람다는 같은 값을 반환합니다. 실제로 수렴에 구애받지 않으므로 함수에 수렴하지 않는 값을 가진 숫자는 예상치 못한 것으로 예상하십시오.

g=lambda x,d=0:x**(d>99or g(x,d+1))

온라인으로 사용해보십시오!


1
산화 티타늄 링크에서는 대체 할 수 complex('j')1j
씨 Xcoder

1
d>99한 번 더 반복하고 더 짧습니다.
Ørjan Johansen

1
로 4 바이트를 절약하고 다음과 g=lambda x,d=0:x**(d>99or g(x,d+1))같이 x**True평가합니다.x
Uriel

@ 우리엘, 정말 똑똑합니다 ..... 감사합니다 !!!
officialaimm

6

파이썬 3, 37 30 27 바이트

@FelipeNardiBatista에서 -7 바이트
@xnor에서 -3 바이트

더 이상 많은 Python을 기억하지 못하지만 Ruby 답변을 이식하고 다른 Python 3 답변을 이겼습니다. : D

lambda x:eval('x**'*99+'1')

온라인으로 사용해보십시오!


1
참고로, f-string은 Python 3.6에서 처음 소개 된 것으로 보입니다 ( python.org/dev/peps/pep-0498 참조) . (이것이 3.5.2에서 코드가 작동하지 않은 이유를 설명합니다.) 다른 사람이 혼란 스러울 때 이것을 언급한다고 생각했습니다.
mathmandan

1
당신의 가치를 대체 할 필요가 없습니다 x, eval('x**'*99+'1')작품
XNOR

@ xnor doh, 물론 그것은 :) 감사합니다
daniero

@xnor Neat-Ruby 답변에 같은 것을 적용하고 어떻게 든 그것을
고쳤

+1, 나는 eval의 존재를 잊어 버린 자신을 때리고있다 .... : D
officialaimm

4

수학, 12 바이트

#//.x_:>#^x&

부동 소수점 숫자를 입력으로 사용합니다.


4

J , 5 바이트

^^:_~

온라인으로 사용해보십시오!

설명

먼저, 끝에 파싱 후 어떤 명령이 실행되고 있는지 보여줄 ~것이며, 새로운 동사를위한 연습이 될 것입니다.

(^^:_~) x = ((x&^)^:_) x

((x&^)^:_) x  |  Input: x
      ^:_     |  Execute starting with y = x until the result converges
  x&^         |    Compute y = x^y

J 솔루션은 여기서 정말 좋습니다. 첫 번째 줄을 더 세밀하게 표현하려면 다음과 같은 일이 발생한다고 말하는 것이 맞습니다 (^^:_) . 파워 conj를 통해 새로운 2 차원 동사를 생성 한 다음, 자기 부사 ~는 동사를 모나 딕으로 만들어 인수가 주어지면로 x확장됩니다 x (^^:_) x. 그 뒤에 왼쪽 x은 "고정"되어 ((x&^)^:_) x메모마다 제공 되며 반복 중에 올바른 인수 만 변경됩니까?
Jonah

1
전력과 다이 애드에 두 개의 인수를주는 경우 @Jonah 물론은 x u^:n y, 왼쪽 인수는 중첩 된 모나드 형성하기 위해 양자 관계와 결합 n에 시간을 y. x u^:n y -> (x&u)^:n y -> (x&u) ... n times ... (x&u) y
마일

4

C # (. NET 코어) , 79 78 바이트

x=>{var a=x;for(int i=0;i++<999;)a=System.Numerics.Complex.Pow(x,a);return a;}

온라인으로 사용해보십시오!

i99까지 반복하면 일부 예제가 필요한 정밀도에 도달하지 못하기 때문에 = 999 까지 반복하기로 결정했습니다 . 예:

Input:                      (0, 1)
Expected output:            (0.4382829367270323, 0.3605924718713857)
Output after 99 iterations: (0.438288569331222,  0.360588154553794)
Output after 999 iter.:     (0.438282936727032,  0.360592471871385)

보시다시피 99 반복 후에 가상 부분은 소수점 5 자리에서 실패했습니다.

Input:                      (1, 1)
Expected output:            (0.6410264788204891, 0.5236284612571633)
Output after 99 iterations: (0.64102647882049,   0.523628461257164)
Output after 999 iter.:     (0.641026478820489,  0.523628461257163)

이 경우 99 번의 반복 후에 예상되는 정밀도를 얻습니다. 실제로 i동일한 바이트 수로 = 1e9 까지 반복 할 수 있지만 코드가 상당히 느려집니다.

  • 익명 사용자 덕분에 1 바이트가 절약되었습니다.

1
+1 복잡한 수업에서 나는 그것이 존재하는지도 몰랐습니다.
TheLethalCoder

1
@TheLethalCoder는 내가 구글 할 때까지 나도하지 않았다. :-)
Charlie


2

루비, 21 20 바이트

->n{eval'n**'*99+?1}

면책 조항 : 루비는 복소수를 제곱 할 때 이상한 값을 반환하는 것으로 보입니다 . Ruby의 전체 수학 모듈을 수정하는 것이이 과제의 범위를 벗어난 것으로 가정하지만 그렇지 않으면이 함수의 결과가 정확해야합니다. 편집 : 내 Python 3 답변 의 최신 변경 사항을 적용하고 갑자기 어떻게 든 동일한 예상 결과를 제공합니다. :)

온라인으로 사용해보십시오!


의 공간을 빼냅니다 eval.
밸류 잉크

복잡한 테스트 사례에서 원래 버전이 실패했습니다.이 문자열은 문자열을 회피하여 보다 우선 순위가 높기 "0+1i**0+1i**0+1i**..."때문에 잘못된 방식으로 구문 분석합니다 . **+
Ørjan Johansen

@ ØrjanJohansen 응, 맞아. 나는 사실에 속지 된 생각 #inspect#to_s다른 값을 반환합니다. 초기 답변을 제출하기 전에 irb에서 몇 가지 테스트를 수행했으며 예를 들어 Complex(1,2)REPL에 들어가면 (1+2i)괄호를 포함하여 줄 것 입니다. 그러나 값을 문자열 화 할 때 괄호는 포함되지 않으므로 우선 순위가 엉망이됩니다.
daniero

eval사용이 금지 되었다고 생각했습니다 .
V. Courtois

@ V.Courtois Ok. 그러나 그렇지 않습니다.
daniero

2

TI-BASIC, 16 바이트

입력 및 출력은에 저장됩니다 Ans.

Ans→X
While Ans≠X^Ans
X^Ans
End


1

자바 스크립트, 33 바이트

f=(x,y=x)=>(x**y===y)?y:f(x,x**y)

JavaScript는 허수를 처리하지 않습니다.
kamoroso94

1

MATL , 20 10 바이트

@LuisMendo 덕분에 절반으로 줄였습니다

t^`Gw^t5M-

온라인으로 사용해보십시오!

이것은 나의 첫 번째 이고 MATL을 사용한 첫 번째이므로 쉽게 아웃 고프 될 수 있다고 확신합니다.


사이트에 오신 것을 환영합니다. 몇 가지 제안 : XII과 같습니다 t. 또한 제거 할 수 XHH자동으로 클립 보드 사용 M,이다 ttt^`yw^t5M-]bb-x. 마지막 부분에서는 원하지 않는 값을 삭제하는 대신 &묵시적 표시 기능이 맨 위에 만 표시하도록 지시합니다. 따라서 ttt^`yw^t5M-]&몇 바이트를 사용 하고 저장할 수 있습니다 .
Luis Mendo

또한 첫 번째 t는 필요하지 않으며 G다른 t것을 대신 사용 하면 피하고 암시 적으로 &남길 수 있습니다 . 우리는 바이트 수를 반으로 줄였습니다! ]t^`Gw^t5M-
Luis Mendo

@LuisMendo 훌륭한 팁을 주셔서 감사합니다! MATL에 대해 배울 점이 많지만 정말 좋습니다.
Cinaski

다행 이네요!
Luis Mendo

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.