我意识到这有点像数学,但是-就这样吧。
在数学中,超运算序列是一个无限的算术运算序列(称为超运算),它从后继的一元运算开始,然后继续进行加法、乘法和幂运算的二进制运算,然后利用右结合性进一步进行超越指数运算的二进制运算。
您的目标是编写一个程序,该程序以三个整数x、y和n作为输入,并输出x和y上第n次超运算的结果。
例如。
1 1 1
输出2
2 4 4
输出65536
3 3 4
输出7625597484987
STDIN
或文件中获取输入。http://en.wikipedia.org/wiki/Tetration有一个很好的解释,以防你无法理解这件事。
发布于 2013-04-30 01:26:15
{1=3⌷⍵:2⌷+\⍵⋄0=2⌷⍵:(⍵[3]⌊3)⌷⍵[1],0,1⋄∇⍵[1],(∇⍵-0 1 0),3⌷⍵-1}⎕
{...}⎕
:接受求值输入(空格分隔的数字计算为数字数组),并对其应用函数。
1=3⌷⍵:
:如果n等于1.
2⌷+\⍵
:返回前两个元素的和(x+y).
⋄0=2⌷⍵:
:否则如果y等于0.
(⍵[3]⌊3)⌷⍵[1],0,1
:创建数字数组x,0,1和返回索引min(n,3)
.
⋄∇⍵[1],(∇⍵-0 1 0),3⌷⍵-1
:否则返回∇(x,∇(x,y-1,n),n-1)。(∇是自引用的)
我有一个“超级提升者”操作符,它接受一个函数并返回下一个超运算。
{⍺⍺/⊃⍴/⌽⍵}
例如,+{⍺⍺/⊃⍴/⌽⍵}
将是乘法函数,+{⍺⍺/⊃⍴/⌽⍵}5 3
输出为15。
但无法让它恢复正常。也许其他人能做到。
发布于 2021-09-28 04:56:16
ṛ+⁵ðx’ß@ƒ>2¥ðỊ?
用果冻编写一个三参数程序是很困难的,不过至少我们只需要在这个问题上使用其中的一个。因此,这个程序按照n y x
的顺序接受三个参数,并作为一个并进函数进行递归。大概是这个Ackermann解和用户APL应答的混合体。
ṛ+⁵ðx’ß@ƒ>2¥ðỊ? Main program as a dyadic link.
Left = n, Right = y, 3rd arg (⁵) = x
A..ðB.......ðC? If C then A else B
Ị If n <= 1
ṛ+⁵ Then y + x
x’ß@ƒ>2¥ Else...
x’ y copies of n-1
ß@ƒ>2 Reduce with the program itself flipped, with
the default value being n>2 (1 or 0)
发布于 2013-04-27 21:10:35
(基于弗朗雷克的回答)
def h(x,y,n):r=n>2;exec"r=h(x,r,n-1);"*y*(n>1);return(x+y,r)[n>1]
print h(*input())
对于大的结果来说非常缓慢。
对于2, 4, 4
,输出是65536
。
https://codegolf.stackexchange.com/questions/11520
复制相似问题