甲弗里德曼号是一个正整数,它等于使用它自己的位结合的操作+,一个非平凡表达- ,*,/,^,括号和级联。
尼斯弗里德曼数是一个正整数,等于一个不平凡的表达式,该表达式使用其自己的数字与相同的运算结合使用,这些数字按其原始顺序排列。
我在这里发明的甚尼斯弗里德曼数(VNFN)是一个尼斯弗里德曼数,可以不用这种表达的不太漂亮的部分来书写(在我看来)。括号,串联和一元取反是不允许的。
对于此挑战,可以使用三种可能的方式编写不带括号的表达式。
前缀:这等效于左联想。这种类型的表达式的所有运算符都写在数字的左侧。每个运算符适用于以下两个表达式。例如:
*+*1234 = *(+(*(1,2),3),4) = (((1*2)+3)*4) = 20
可以这样写的VNFN是343:
^+343 = ^(+(3,4),3) = ((3+4)^3) = 343
后缀:这等效于右联想。就像前缀表示法一样,除了操作在数字的右边。每个运算符都适用于前面的两个表达式。例如:
1234*+* = (1,(2,(3,4)*)+)* = (1*(2+(3*4))) = 14
可以这样写的VNFN是15655:
15655^+** = (1,(5,(6,(5,5)^)+)*)* = (1*(5*(6+(5^5)))) = 15655
中缀:中缀表示法对这五个操作使用标准操作顺序。出于挑战的目的,将按以下方式定义操作顺序:括号^
右为第一个,关联为右。然后,将括号括起来*
,/
同时将其左移。最后,将括号括起来+
,-
同时将其左移。
1-2-3 = (1-2)-3 = -4
2/3*2 = (2/3)*2 = 4/3
2^2^3 = 2^(2^3) = 256
1^2*3+4 = (1^2)*3+4 = 7
可以这样写的VNFN是11664:
1*1*6^6/4 = (((1*1)*(6^6))/4) = 11664
挑战:给定一个正整数,如果可以使用前缀,中缀或后缀表示形式将其表示为自己数字的非平凡表达式,则输出该表达式。如果不是,则什么也不输出。
说明:如果可以使用多种表示形式,则可以输出它们的任何非空子集。例如,736是VNFN:
+^736 = 736
7+3^6 = 736
+^736
,7+3^6
或全部都是可接受的输出。
“ Trivial”表达式表示不使用任何运算符的表达式。这仅与一位数字有关,并且意味着一位数字不能为VNFN。这是从弗里德曼数的定义继承的。
对于百万以下的输入,答案应在几秒钟或几分钟之内。
IO:标准IO规则。完整的程序,功能,动词或类似内容。STDIN,命令行,函数参数或类似参数。对于输出“ Nothing”,空字符串,空行null
或类似内容以及空集合都可以。输出可能是用不能以表示形式的字符分隔的字符串,或者可能是字符串的集合。
例子:
127
None
343
^+343
736
736^+
7+3^6
2502
None
15655
15655^+**
11664
1*1*6^6/4
1^1*6^6/4
5
None
计分:这是代码高尔夫球。最少的字节数获胜。
另外,如果找到一个,请在答案中输入新的甚好弗里德曼编号。
Parentheses, concatenation and unary negation are disallowed.
*(+(*(1,2),3,4)
在,3