背景:
Pi(π
)是一个超越数,因此具有一个非终止的十进制表示形式。同样,如果以其他整数为基数,表示形式也不会终止。但是,如果我们将它写在基础上π
怎么办?
小数位数代表10的幂,因此:
π = 3.14… = (3 * 10^0) + (1 * 10^-1) + (4 * 10^-2) + …
因此,以base为底π
,数字将代表以下各项的幂π
:
π = 10 = (1 * π^1) + (0 * π^0)
在这个新的基础上,整数现在具有非终止表示形式。因此,十进制的10现在变为:
10 => 100.01022… = (1 * π^2) + (0 * π^1) + (0 * π^0) + (0 * π^-1) + (1 * π^-2) + …
请注意,以底数π
为基础的数字为0、1、2、3,因为这些数字小于π
。
挑战:
给定一个非负整数x
,则:
在base中输出(不停止)其表示
π
。如果数字具有有限的表示形式(0、1、2、3),则程序可能会停止而不是打印无限零。取一个任意大的整数
n
,并输出base 的前n
几位。x
π
规则:
- 由于一个数字可能有多种表示形式,因此您必须输出一个看起来最大(标准化)的数字。就像
1.0 = 0.9999…
十进制一样,这个问题也存在于此基础中。在base中π
,一个仍然是1.0
,但也可以写为0.3011…
。同样,十是100.01022…
,但也可以写为30.121…
或23.202…
。 - 这是代码高尔夫球,因此最少的字节获胜。程序或功能。
- 没有内置插件(我在看着你,Mathematica)
结果:
0 = 0
1 = 1
2 = 2
3 = 3
4 = 10.220122021121110301000010110010010230011111021101…
5 = 11.220122021121110301000010110010010230011111021101…
6 = 12.220122021121110301000010110010010230011111021101…
7 = 20.202112002100000030020121222100030110023011000212…
8 = 21.202112002100000030020121222100030110023011000212…
9 = 22.202112002100000030020121222100030110023011000212…
10 = 100.01022122221121122001111210201201022120211001112…
42 = 1101.0102020121020101001210220211111200202102010100…
1337 = 1102021.0222210102022212121030030010230102200221212…
9999 = 100120030.02001010222211020202010210021200221221010…
验证:
您可以在此处使用Mathematica代码验证所需的任何输出。第一个参数是x
,第三个参数是n
。如果超时,请选择一个n
并运行它。然后单击“在代码中打开”以使用该程序打开一个新的Mathematica工作表。那里没有时间限制。
在此处将结果输出转换为数字。
有关:
4
“没有内置插件”是否不包含用于获取Pi的内置插件?
—
Nit
@Nit不,这意味着没有内置函数可以完成或琐碎整个任务。或者,如果存在这样一个内置函数(如我所展示的Mathematica那样),请确保包括一个没有内置函数的解决方案,该解决方案将用于答案的实际分数。这样,您仍然可以向人们展示内置组件的存在。
—
mbomb007'4
我们可以使用有限精度的π文字吗?
—
暴民埃里克(Erik the Outgolfer)'18年
@EriktheOutgolfer编号。这不足以获得正确的输出。尽管我不确定输入多少位数
—
mbomb007 '18
n
,但我猜Pi必须至少有n
几位数的精度。
IMO:禁止基本转换内置函数只会增加不必要的复杂性。如果您觉得挑战无足轻重,那么,挑战可能就这么简单:琐碎
—
Conor O'Brien