Số nguyên trong Base Pi


11

Lý lịch:

Pi ( π) là một số siêu việt , và do đó nó có biểu diễn thập phân không kết thúc. Tương tự, biểu diễn không chấm dứt nếu được viết bằng bất kỳ cơ sở số nguyên nào khác. Nhưng nếu chúng ta viết nó trong căn cứ πthì sao?

Các chữ số thập phân thể hiện quyền hạn của 10, vì vậy:

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

Vì vậy, trong cơ sở π, các chữ số sẽ đại diện cho quyền hạn của π:

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

Trong cơ sở mới này, số nguyên hiện có các biểu diễn không kết thúc. Vì vậy, 10 trong số thập phân bây giờ trở thành như sau:

10 => 100.01022… = (1 * π^2) + (0 * π^1) + (0 * π^0) + (0 * π^-1) + (1 * π^-2) + …

Lưu ý rằng trong cơ sở πcác chữ số được sử dụng là 0,1,2,3 vì đây là các chữ số nhỏ hơn π.

Thử thách:

Cho một số nguyên không âm x, hoặc:

  1. Đầu ra (không dừng lại) đại diện của nó trong cơ sở π. Nếu số có biểu diễn hữu hạn (0, 1, 2, 3), thì chương trình có thể tạm dừng thay vì in các số không vô hạn.

  2. Lấy một số nguyên lớn tùy ý nvà xuất các nchữ số đầu tiên của xcơ sở π.

Quy tắc:

  • Vì một số có nhiều biểu diễn có thể, bạn phải xuất ra một số xuất hiện lớn nhất (chuẩn hóa). Cũng như 1.0 = 0.9999…trong thập phân, vấn đề này cũng tồn tại trong cơ sở này. Trong cơ sở π, một vẫn còn 1.0, nhưng cũng có thể được viết như 0.3011…, ví dụ. Tương tự, mười là 100.01022…, nhưng cũng có thể được viết là 30.121…hoặc 23.202….
  • Đây là mã golf, vì vậy ít byte nhất sẽ thắng. Chương trình hoặc chức năng.
  • Không có tích hợp ( Tôi đang nhìn bạn , Mathicala )

Các kết quả:

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…

10.000 chữ số đầu tiên của mười trong cơ sở Pi

Xác minh:

Bạn có thể xác minh bất kỳ đầu ra nào bạn muốn bằng cách sử dụng mã Mathicala tại đây . Tham số đầu tiên là x, thứ ba là n. Nếu nó hết thời gian, chọn một nhỏ nvà chạy nó. Sau đó nhấp vào "Mở trong mã" để mở một bảng tính Mathicala mới với chương trình. Không có giới hạn thời gian ở đó.

Chuyển đổi kết quả đầu ra thành một số ở đây .

Liên quan:


4
Có "không tích hợp" bao gồm không có phần dựng sẵn để nhận Pi không?
Nit

3
@Nit Không, điều đó có nghĩa là không có tích hợp nào hoàn thành hoặc tầm thường hóa toàn bộ tác vụ. Hoặc nếu một tích hợp như vậy tồn tại (như Mathicala tôi đã trình bày), hãy đảm bảo bao gồm một giải pháp mà không có tích hợp sẽ được sử dụng cho điểm thực tế của câu trả lời. Bằng cách đó, bạn vẫn có thể cho mọi người thấy rằng tích hợp tồn tại.
mbomb007

Chúng tôi có thể sử dụng một chữ số chính xác giới hạn?
Erik the Outgolfer

@EriktheOutgolfer Không. Điều đó sẽ không đủ để đến đúng đầu ra. Mặc dù tôi không chắc có bao nhiêu chữ số được yêu cầu cho một đầu vào n, tôi đoán rằng Pi phải có ít nhất các nchữ số chính xác.
mbomb007

8
IMO: Cấm xây dựng các chuyển đổi cơ sở chỉ thêm phức tạp không cần thiết. Nếu bạn cảm thấy nó tầm thường hóa thử thách, thì có lẽ thử thách chỉ là: tầm thường
Conor O'Brien

Câu trả lời:


1

Julia 0,6 , 81 byte

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

In ra các chữ số (và. Chi phí cho tôi 14 byte) cho đến khi nó Xếp chồng lên khoảng 22k chữ số trên TIO. Nếu tôi được phép chuyển đầu vào dưới dạng BigFloattôi có thể cắt 5 byte. Làm cho việc sử dụng được xây dựng trong hằng số chính xác tùy ý π. Nhưng nó mát hơn một chút, đó thực sự là hằng số chính xác thích nghi, π*1.0là số dấu phẩy động 64 bit, π*big(1.0)(còn được nhân với số chính xác cao hơn) cho πbất cứ độ chính xác nào của bạn được đặt.

Hãy thử trực tuyến!


3

Python 3 , 471 317 310 byte

7 byte nhờ caird coinheringaahing.

Chắc chắn có những sân golf mà tôi đã bỏ lỡ. Hãy chỉ ra chúng trong các ý kiến.

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:]

Hãy thử trực tuyến!

Phiên bản bị đánh cắ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:]

Hãy thử trực tuyến!


Bạn có yêu cầu Python 3 không? Nếu 2 có thể được sử dụng, bạn có thể sử dụng các khoảng trắng và tab hỗn hợp.
mbomb007

@ mbomb007 "golf mà tôi đã bỏ lỡ" không bao gồm chuyển sang phiên bản cũ hơn chỉ vì mục đích chơi gôn: P
Leaky Nun

Sau đó, bạn cũng có thể sử dụng `i`.
mbomb007

3

Ruby -rbigdecimal/math , 111 103 97 byte

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

Hãy thử trực tuyến!

Lấy số đầu vào như xvà độ chính xác mong muốn là n. Đầu ra bằng cách in. Làm cho việc sử dụng thư viện BigDecimal tích hợp cho giá trị PI phân nhánh tùy ý.


xây dựng trong bị cấm rõ ràng
Leaky Nun

1
Xem bình luận cho nhiệm vụ: "-" Không có tích hợp "có bao gồm không có phần dựng sẵn để nhận Pi không?" "- Không, điều đó có nghĩa là không có tích hợp nào hoàn thành hoặc tầm thường hóa toàn bộ nhiệm vụ."
Kirill L.

@LeakyNun Kirill nói đúng. Tích hợp cho Pi được cho phép miễn là câu trả lời kết quả là chính xác.
mbomb007

Bạn không phải đếm byte của các tùy chọn dòng lệnh? Tôi không chắc nó hoạt động như thế nào
mbomb007

Tôi muốn nói, không còn nữa theo meta này . Một cái gì đó trong dòng "coi đây là một loại ngôn ngữ khác với Ruby đơn giản".
Kirill L.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.