Base Pi의 정수


11

배경:

Pi ( π)는 초월 숫자 이므로 종료하지 않는 10 진수 표현을 갖습니다. 마찬가지로 다른 정수 기반으로 작성된 표현은 종료되지 않습니다. 그러나 우리가 그것을 기본으로 쓴다면 π어떨까요?

10 진수는 10의 거듭 제곱을 나타내므로 다음과 같습니다.

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

따라서 π밑에서 숫자는 π다음 과 같이 거듭 제곱을 나타냅니다 .

π = 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)이 있으면 무한 영 (0)을 인쇄하는 대신 프로그램이 중지 될 수 있습니다.

  2. 임의로 큰 정수를 가져 와서 base n의 첫 번째 n숫자를 출력하십시오 .xπ

규칙 :

  • 숫자에는 가능한 여러 표현 이 있으므로 가장 큰 (정규화 된) 것으로 나타나는 것을 출력해야합니다 . 로 그냥 1.0 = 0.9999…진수,이 문제도이 기본 존재합니다. 기본적 π으로 하나는 여전히 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 자리

확인:

당신은 당신이 매스 매 티카 코드를 사용하여 원하는 출력을 확인할 수 있습니다 여기를 . 첫 번째 매개 변수는 x이고 세 번째 매개 변수는 입니다 n. 시간이 초과되면 작은 것을 골라 n실행하십시오. 그런 다음 "코드에서 열기"를 클릭하여 프로그램과 함께 새 Mathematica 워크 시트를 엽니 다. 거기에는 시간 제한이 없습니다.

결과 출력을 여기 의 숫자로 변환 하십시오 .

관련 :


4
"내장 없음"에 Pi를 얻기위한 내장이 포함되어 있지 않습니까?
Nit

3
@Nit 아니요, 전체 작업을 완료하거나 사소한 내장 기능이 없음을 의미합니다. 또는 (내가 보여준 Mathematica와 같은) 그러한 내장이 존재한다면, 답변의 실제 점수에 사용될 내장없는 솔루션을 포함시켜야합니다. 이런 식으로, 당신은 여전히 ​​사람들에게 빌트인이 존재한다는 것을 보여줄 수 있습니다.
mbomb007

제한된 정밀도 π 리터럴을 사용할 수 있습니까?
Outgolfer Erik

@EriktheOutgolfer No. 정확한 출력에 도달하기에는 충분하지 않습니다. 의 입력에 몇 자릿수가 필요한지 잘 모르겠지만 nPi는 적어도 n자릿수 이상의 자릿수를 가져야한다고 생각합니다 .
mbomb007

8
IMO : 기본 변환 내장을 금지하면 불필요한 복잡성이 추가됩니다. 도전을 사소한 것처럼 느끼면 아마도 도전은 다음과 같습니다. 사소한
Conor O'Brien

답변:


1

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

TIO에서 스택이 약 22k 자릿수로 오버플로 될 때까지 숫자 (및 14 바이트의 비용이 드는.)를 인쇄합니다. 입력을 전달할 수 있으면 BigFloat5 바이트를자를 수 있습니다. 내장 된 임의의 정밀도 상수를 사용 π합니다. 그러나 그것보다 약간 더 차갑습니다. 실제로 적응 정밀도 상수 π*1.0는 64 비트 부동 소수점 숫자입니다 π*big(1.0)(일명 높은 정밀도 숫자로 곱함)는 π정밀도가 설정된 모든 것을 제공 합니다.

온라인으로 사용해보십시오!


3

파이썬 3 , 471 317 310 바이트

caird coinheringaahing 덕분에 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:]

온라인으로 사용해보십시오!


파이썬 3이 필요하십니까? 2를 사용할 수 있으면 공백과 탭을 혼합하여 사용할 수 있습니다.
mbomb007

@ mbomb007 "내가 놓친 골프"는 골프를 위해서 이전 버전으로 전환하는 것을 포함하지 않습니다. : P
Leaky Nun

그런 다음을 사용할 수도 있습니다 `i`.
mbomb007

3

루비 -rbigdecimal/math , 111 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를 얻기위한 내장이 포함되어 있지 않습니까?" "-아니오, 전체 작업을 완료하거나 사소한 내장 기능이 없음을 의미합니다."
Kirill L.

@LeakyNun Kirill이 맞습니다. 결과 답변이 정확하면 Pi 용 내장 기능이 허용됩니다.
mbomb007

명령 행 옵션의 바이트 수를 세지 않아도됩니까? 어떻게 작동하는지 잘 모르겠습니다
mbomb007

나는 이 메타에 따라 더 이상 말하지 않을 것 입니다. "이것은 평범한 루비와는 다른 종류의 언어로 간주된다"는 내용이다.
Kirill L.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.