무한 파워 타워


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. 또한 제거 할 수 XH및 H자동으로 클립 보드 사용 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.