Base Pi中的整数


11

背景:

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,则:

  1. 在base中输出(不停止)其表示π。如果数字具有有限的表示形式(0、1、2、3),则程序可能会停止而不是打印无限零。

  2. 取一个任意大的整数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…

Pi基础十的前10,000位数字

验证:

您可以在此处使用Mathematica代码验证所需的任何输出。第一个参数是x,第三个参数是n。如果超时,请选择一个n并运行它。然后单击“在代码中打开”以使用该程序打开一个新的Mathematica工作表。那里没有时间限制。

此处将结果输出转换为数字。

有关:


4
“没有内置插件”是否不包含用于获取Pi的内置插件?
Nit

3
@Nit不,这意味着没有内置函数可以完成或琐碎整个任务。或者,如果存在这样一个内置函数(如我所展示的Mathematica那样),请确保包括一个没有内置函数的解决方案,该解决方案将用于答案的实际分数。这样,您仍然可以向人们展示内置组件的存在。
mbomb007'4

我们可以使用有限精度的π文字吗?
暴民埃里克(Erik the Outgolfer)'18年

@EriktheOutgolfer编号。这不足以获得正确的输出。尽管我不确定输入多少位数n,但我猜Pi必须至少有n几位数的精度。
mbomb007 '18

8
IMO:禁止基本转换内置函数只会增加不必要的复杂性。如果您觉得挑战无足轻重,那么,挑战可能就这么简单:琐碎
Conor O'Brien

Answers:


1

朱莉娅0.6,81字节

f(x,i=log(π,x1)=(y=big(π)^i;d::Int=x÷y;print(i==0?"$d.":"$d");f(x-d*y,i-1))

打印出数字(以及。花费了我14个字节),直到它在TIO上的Stack溢出约22k为止。如果允许输入为BigFloatI,则可以减少5个字节。利用内置的任意精度常量π。但是比它凉爽的是,它实际上是一个自适应精度常数,π*1.0是一个64位浮点数π*big(1.0)(也就是乘以一个更高的精度数)π,无论您设置的精度是多少。

在线尝试!


3

Python 3中471个 317 310字节

7字节感谢caird的coheringinging。

当然,我错过了高尔夫。随时在评论中指出它们。

def h(Q):
	a=0;C=b=4;c=d=s=1;P=o=3
	while P^C:
		a,b,c,d,s,o,P,A,B=b,s*a+o*b,d,s*c+o*d,s+o,o+2,C,0,1
		for I in Q:B*=c;A=A*a+I*B
		C=A>0
	return P
def f(n,p):
	Q=[-n];R=""
	while h([1]+Q)<1:Q=[0]+Q
	Q+=[0]*p
	for I in range(len(Q)):
		i=3;Q[I]+=3
		while h(Q):Q[I]-=1;i-=1
		R+=str(i)
	return R[:-p]+"."+R[-p:]

在线尝试!

非高尔夫版本:

def poly_eval_pi_pos(poly,a=0,b=4,c=1,d=1,o=3,s=1,prev=9,curr=6):
	while prev != curr:
		a,b,c,d,s,o=b,s*a+o*b,d,s*c+o*d,s+o,o+2
		prev = curr
		res_n, res_d = 0,1
		for I in poly:
			res_d *= c
			res_n = res_n*a + I * res_d
		curr = res_n > 0
	return prev
def to_base_pi(n,precision):
	poly = [-n]
	res = ""
	while not poly_eval_pi_pos([1]+poly):
		poly = [0]+poly
	poly += [0]*precision
	for index in range(len(poly)):
		i = 3
		poly[index] += 3
		while poly_eval_pi_pos(poly):
			poly[index] -= 1
			i -= 1
		res += str(i)
	return res[:-precision]+"."+res[-precision:]

在线尝试!


您需要Python 3吗?如果可以使用2,则可以使用混合的空格和制表符。
mbomb007'4

@ mbomb007“我错过的高尔夫球场”不包括仅仅为了打高尔夫球而切换到旧版本:P
Leaky Nun

然后,您也可以使用`i`
mbomb007 '18

3

红宝石 -rbigdecimal/math111个 103 97字节

->x,n{q=BigMath::PI n;r=q**m=Math.log(x,q).to_i;n.times{$><<"#{?.if-2==m-=1}%i"%d=x/r;x%=r;r/=q}}

在线尝试!

将输入数字作为,x并将所需精度作为n。通过打印输出。利用内置的BigDecimal库获取任意精度的PI值。


建于被明确禁止
漏嫩

1
请参阅对该任务的注释:“-“没有内置插件”是否不包含用于获取Pi的内置插件?” “-不,这意味着没有内置工具可以完成或琐碎整个任务。”
Kirill L.

@LeakyNun Kirill是正确的。只要得到的答案是正确的,就可以使用Pi的内置函数。
mbomb007 '18

您是否不必计算命令行选项的字节数?我不确定如何使用
mbomb007 '18

我会说,不再是这个meta了。“考虑到这是一种与普通Ruby不同的语言”中的某些内容。
Kirill L.

1

Python 3 + sympy,144个字节

from sympy import*
def f(n,p):
	R="";O=n and int(log(n,pi));r=pi**O
	for _ in range(O+p):R+=str(int(n/r));n%=r;r/=pi
	return R[:O+1]+"."+R[O+1:]

在线尝试!

实际上,相当慢。

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.