बेस पी में इंटेगर


11

पृष्ठभूमि:

Pi ( π) एक ट्रान्सेंडैंटल संख्या है , और इसलिए इसमें एक गैर-समाप्ति दशमलव प्रतिनिधित्व है। इसी तरह, प्रतिनिधित्व किसी अन्य पूर्णांक आधार में लिखे जाने पर समाप्त नहीं होता है। लेकिन क्या होगा अगर हमने इसे आधार में लिखा है π?

दशमलव में अंक 10 की शक्तियों का प्रतिनिधित्व करते हैं, इसलिए:

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

इसलिए आधार में π, अंक πनिम्न शक्तियों का प्रतिनिधित्व करेंगे :

π = 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. आउटपुट (बिना रुके) आधार में इसका प्रतिनिधित्व करता है π। यदि संख्या में परिमित प्रतिनिधित्व (0, 1, 2, 3) है, तो प्रोग्राम अनंत शून्य को मुद्रित करने के बजाय रुक सकता है।

  2. मनमाने ढंग से बड़े पूर्णांक लें n, और आधार में पहले nअंकों का उत्पादन करें ।xπ

नियम:

  • चूंकि एक संख्या में कई संभावित प्रतिनिधित्व होते हैं, इसलिए आपको सबसे बड़े (सामान्यीकृत) प्रतीत होने वाले आउटपुट का उत्पादन करना होगा । जैसे 1.0 = 0.9999…दशमलव में, यह समस्या इस आधार में भी मौजूद है। आधार में π, एक अभी भी है 1.0, लेकिन 0.3011…उदाहरण के लिए भी लिखा जा सकता है । इसी तरह, दस है 100.01022…, लेकिन 30.121…या के रूप में भी लिखा जा सकता है 23.202…
  • यह कोड-गोल्फ है, इसलिए सबसे कम बाइट जीतती है। कार्यक्रम या समारोह।
  • कोई बिल्ट-इन ( मैं आपको देख रहा हूँ , गणितज्ञ )

परिणाम:

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 अंक

सत्यापन:

आप यहां पर किसी भी आउटपुट को सत्यापित कर सकते हैं, जिसे आप Mathematica कोड का उपयोग करना चाहते हैं । पहला पैरामीटर है x, तीसरा है n। यदि यह समय समाप्त हो जाता है, तो एक छोटा चुनें nऔर इसे चलाएं। फिर कार्यक्रम के साथ एक नया गणित कार्यपत्रक खोलने के लिए "कोड इन ओपन" पर क्लिक करें। वहां कोई समय सीमा नहीं है।

परिणामी आउटपुट को यहां संख्या में परिवर्तित करें

सम्बंधित:


4
क्या "कोई बिल्ट-इन" में पीआई पाने के लिए कोई बिल्ट-इन शामिल नहीं है?
नाइट

3
@ नहीं नहीं, इसका मतलब है कि कोई भी अंतर्निहित कार्य पूरा नहीं करता है या पूरा करता है। या यदि ऐसा अंतर्निहित है (जैसे मैथेमेटिका मैं दिखाया गया है), तो अंतर्निहित बिना किसी समाधान को शामिल करना सुनिश्चित करें, जिसका उपयोग उत्तर के वास्तविक स्कोर के लिए किया जाएगा। इस तरह, आप अभी भी लोगों को दिखाते हैं कि अंतर्निहित मौजूद है।
mbomb007

क्या हम एक सीमित-सटीक π शाब्दिक का उपयोग कर सकते हैं?
आउटगोल्फर

@EriktheOutgolfer No. यह सही आउटपुट पर आने के लिए पर्याप्त नहीं होगा। हालांकि मुझे यकीन नहीं है कि इनपुट के लिए कितने अंकों की आवश्यकता होती है n, मुझे लगता है कि पाई में कम से कम 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))

जब तक यह TIO पर लगभग 22k अंकों से अधिक नहीं हो जाता, तब तक अंकों को प्रिंट करता है (और जो मुझे 14 बाइट्स की लागत है)। अगर मुझे इनपुट पास करने की अनुमति है तो मैं BigFloat5 बाइट्स काट सकता हूं। निर्मित का उपयोग मनमाना सटीक स्थिरांक में करता है π। लेकिन इसकी तुलना में थोड़ा ठंडा है, वास्तव में एक अनुकूली सटीक स्थिरांक है, π*1.0एक 64 बिट फ्लोटिंग पॉइंट नंबर है, π*big(1.0)(उर्फ एक उच्च परिशुद्धता संख्या से गुणा किया जाता है) πजो भी आपकी सटीक सेट करने के लिए सेट होता है।

इसे ऑनलाइन आज़माएं!


3

पायथन 3 , 471 317 310 बाइट्स

7 बाइट्स के लिए धन्यवाद caird coinheringaahing।

निश्चित रूप से ऐसे गोल्फ हैं जिन्हें मैंने याद किया। बेझिझक उन्हें टिप्पणियों में इंगित करें।

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

इसे ऑनलाइन आज़माएं!

Ungolfed संस्करण:

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 "गोल्फ जिन्हें मैंने याद किया" में केवल गोल्फिंग के लिए एक पुराने संस्करण पर स्विच करना शामिल नहीं है: पी
लीकी नून

तब आप भी इस्तेमाल कर सकते हैं `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। प्रिंट करके आउटपुट। मनमाना पीआई मान के लिए अंतर्निहित बिगडेकल लाइब्रेरी का उपयोग करता है।


में निर्मित स्पष्ट रूप से निषिद्ध है
लीक नून

1
कार्य के लिए टिप्पणियां देखें: "- क्या" कोई बिल्ट-इन "में पीआई पाने के लिए कोई बिल्ट-इन शामिल नहीं है?" "- नहीं, इसका मतलब है कि कोई भी अंतर्निहित कार्य पूरा नहीं करता है या संपूर्ण कार्य को तुच्छ बनाता है।"
किरिल एल।

@LeakyNun Kirill सही है। पीआई के लिए बिल्ट-इन की अनुमति दी जाती है जब तक कि परिणामी उत्तर सही हो।
mbomb007

क्या आपको कमांड लाइन विकल्पों के बाइट्स की गिनती नहीं करनी है? मुझे यकीन नहीं है कि यह कैसे काम करता है
mbomb007

मैं कहता हूँ, अब इस मेटा के अनुसार नहीं । "सादे रूबी से इस तरह की एक अलग भाषा" पर विचार करें।
किरिल एल।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.