无限动力塔


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 '17

@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
Anders Kaseorg

Answers:





7

Python 3中40 39 35个字节

  • 感谢@ØrjanJohansen提供一个字节:d>99而不是d==99:增加1次迭代以减少字节数
  • 感谢@Uriel提供4个字节:明智地利用了x**Truex in 中的事实x**(d>99or g(x,d+1))。对于大于99的深度,该术语中的表达式求值为True,因此返回传递的值。

最大深度为100(即深度为100)的递归lambda返回相同的值。实际上是与收敛无关的,因此对于函数具有非收敛值的数字,请期望意外的结果。

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

在线尝试!


1
在tio链接中,您可以替换complex('j')1j
Xcoder先生17年

1
d>99多做一次迭代,并且更短。
与Orjan约翰森

1
用保存4个字节g=lambda x,d=0:x**(d>99or g(x,d+1)),结果x**Truex
Uriel

@Uriel,那真的很聪明.....谢谢!!!
Officialaimm

6

Python 3,37 30 27字节

@FelipeNardiBatista的-7个字节。
来自@xnor的-3字节

我已经不记得很多Python了,但是我设法移植了我的Ruby答案并击败了其他Python 3答案:D

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

在线尝试!


1
仅供参考,似乎f字符串是在Python 3.6中首次引入的:请参见python.org/dev/peps/pep-0498。(这将解释为什么您的代码在3.5.2中对我不起作用)。只是以为我提到了这个,以防其他人感到困惑。
mathmandan

1
您无需替换的价值xeval('x**'*99+'1')作品
xnor

@xnor doh当然会:)谢谢
daniero

@xnor Neat-我在Ruby回答中应用了相同的内容,并以某种方式对其进行了修复:)
daniero

+1,我因为忘了存在eval而打耳光。...:D
officialaimm

4

Mathematica,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解决方案在这里真的很棒。要细化您的第一行,可以说发生以下情况是正确的:(^^:_) 通过power conj创建一个新的二元动词,然后self副词~使该动词x变为单数,因此当给定参数时,它会扩展为x (^^:_) x。左边x随后“粘住”,((x&^)^:_) x根据您的注释给出,并且在迭代过程中只有右边的参数发生变化?
约拿(Jonah)

1
@Jonah当然,当给有力的二元组两个参数时x u^:n y,左参数与该二元组结合形成一个嵌套n在上的monad yx u^:n y -> (x&u)^:n y -> (x&u) ... n times ... (x&u) y
英里

4

C#(.NET Core)79 78字节

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

在线尝试!

我选择迭代直到i= 999,因为如果迭代到99,则某些示例未达到所需的精度。例:

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次迭代,虚部在小数点后第五位失败。

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直到我用谷歌搜索之前都没有。:-)
查理


2

Ruby,21个 20个字节

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

免责声明:当将复数提高为幂时,Ruby 似乎返回了一些奇怪的值。我认为解决Ruby整个数学模块的挑战超出了范围,但是否则此函数的结果应该正确。 编辑:从我的Python 3答案应用了最新的更改,突然之间它以某种方式给出了相同的预期结果:)

在线尝试!


之后拿出空间eval
价值墨水

您的原始版本无法通过复杂的测试案例,因为它逃避了字符串"0+1i**0+1i**0+1i**...",因为**优先级高于,所以以错误的方式进行解析+
与Orjan约翰森

@ØrjanJohansen恩,你是对的。我猜我对#inspect#to_s返回不同的值感到迷惑。在提交初始答案之前,我在irb中进行了一些测试,发现例如输入Complex(1,2)REPL会给出(1+2i),包括括号在内。但是,当对值进行字符串化时,不包括括号,因此,正如您所指出的那样,优先级弄乱了它。
daniero

我以为eval禁止使用。
V. Courtois

@ V.Courtois好的。但事实并非如此。
daniero

2

TI-BASIC,16字节

输入和输出存储在中Ans

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

1

R36 33字节

- 感谢Jarko Dubbeldam提供3个字节

Reduce(`^`,rep(scan(,1i),999),,T)

从stdin读取。Reduce从右边开始按s以获取正确顺序应用的指数。

试试看(功能)

试试看(stdin)


1
scan(,1i)作品。类似于scan(,'')工作原理。
JAD

@JarkoDubbeldam当然!有时我的大脑不起作用。
朱塞佩


1

MATL20 10字节

@LuisMendo减少一半

t^`Gw^t5M-

在线尝试!

这是我的第一个也是我第一次使用MATL,所以我敢肯定它很容易被淘汰。


欢迎来到该网站,并且是一个不错的第一答案!一些建议:XII等同于t。您也可以删除XHH使用自动剪贴板M,即ttt^`yw^t5M-]bb-x。在最后一部分中,可以使用代替删除不需要的值&,它告诉隐式显示功能仅显示顶部。因此,您可以使用ttt^`yw^t5M-]&并保存一些字节。
路易斯·门多

另外,t不需要第一个,而使用G而不是第一个t可以避免&,从而保持]隐式:t^`Gw^t5M-。嘿,我们将字节数减少了一半!
路易斯·门多

@LuisMendo感谢您的出色提示!我对MATL有很多了解,但我真的很喜欢。
Cinaski

很高兴听您这么说!
路易斯·门多

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.