Base Piの整数


11

バックグラウンド:

Pi(π)は超越数であるため、終了しない10進表現を持ちます。同様に、他の整数ベースで記述された場合、表現は終了しません。しかし、baseで記述した場合はどうなりπますか?

10進数の数字は10の累乗を表します。

π = 3.14… = (3 * 10^0) + (1 * 10^-1) + (4 * 10^-2) + …

したがって、base πでは、数字は次のべき乗を表しますπ

π = 10 = (1 * π^1) + (0 * π^0)

この新しいベースでは、整数は終了しない表現になりました。したがって、10進数で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. 任意の大きな整数を取り、in baseのn最初のn桁を出力します。xπ

ルール:

  • 数値には複数の可能な表現があるので、最大の(正規化された)表示を出力する必要があります1.0 = 0.9999…10進数と同様に、この問題もこのベースに存在します。base πでは、1つはまだ1.0ですが0.3011…、たとえばと書くこともできます。同様に、10はですが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の最初の10,000桁

検証:

こちらのMathematicaコードを使用して、必要な出力を確認できます。最初のパラメーターはx、3番目はnです。タイムアウトした場合は、小さいものnを選んで実行します。次に、「コードで開く」をクリックして、プログラムで新しいMathematicaワークシートを開きます。時間制限はありません。

ここで結果の出力を数値に変換します

関連:


4
「ビルトインなし」には、Piを取得するためのビルトインは含まれていませんか?
NIT

3
@Nitいいえ、これはタスク全体を完了または単純化する組み込み機能がないことを意味します。または、そのようなビルトインが存在する場合(私が示したMathematicaのように)、答えの実際のスコアに使用されるビルトインのないソリューションを必ず含めてください。そうすれば、組み込みが存在することを人々に示すことができます。
mbomb007

精度に制限のあるπリテラルを使用できますか?
エリックアウトゴルファー

@EriktheOutgolferいいえ。正しい出力を得るには十分ではありません。の入力に必要な桁数はわかりnませんが、Piには少なくともn桁数の精度が必要だと思います。
mbomb007

8
IMO:基本変換ビルトインを禁止すると、不必要な複雑さが追加されます。あなたがそれが挑戦を些細にするように感じるなら、おそらく、挑戦はそれだけかもしれません:些細な
コナーオブライエン

回答:


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))

StackがTIOで約22k桁でオーバーフローするまで、数字(および14バイトのコストがかかる。)を出力します。入力をaとして渡すことが許可されている場合、BigFloat5バイトをカットできます。組み込みの任意精度定数を使用しπます。しかし、それよりも少しクールで、実際には適応精度定数π*1.0は、64ビット浮動小数点数π*big(1.0)(別名、より高い精度の数値を乗算)ですπ

オンラインでお試しください!


3

Pythonの3471の 317 310バイト

ケアード・コイナーリンガーのおかげで7バイト。

きっと私が見逃したゴルフがあります。コメントで自由に指摘してください。

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

@ mbomb007「golfs私が見逃していること」だけでゴルフのために古いバージョンへの切り替えは含まれていません:P
漏れ修道女

次に、を使用することもできます`i`
mbomb007

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。印刷による出力。任意の精度PI値に組み込みBigDecimalライブラリを使用します。


ビルトインは明示的に禁止されています
Leaky Nun

1
タスクへのコメントを参照してください:「-「ビルトインなし」にはPiを取得するためのビルトインは含まれていませんか?」「-いいえ、それはタスク全体を完了または単純化する組み込み機能がないことを意味します。」
キリルL.

@LeakyNunキリルは正しい。結果の答えが正しい限り、Piの組み込みが許可されます。
mbomb007

コマンドラインオプションのバイト数を数える必要はありませんか?私は確かにどのような作品ではないよ
mbomb007

私は、このメタによると、もはやそうではないと言いたいです。「これを普通のRubyとは異なる種類の言語と考えてください」という行にあるもの。
キリルL.

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.