64 बाइट्स या उससे कम में संभव के रूप में कई दशमलव स्थानों के लिए खिनचिन की निरंतरता


22

खिनचिन का स्थिरांक एक जिज्ञासु गणितीय स्थिरांक है, जो कि वुल्फराम मैथवॉल्ड के अनुसार , "उच्च परिशुद्धता की गणना करने के लिए कुख्यात है"

यहाँ यह 100 अंकों का है:

2,685452001065306445309714835481795693820382293994462953051152345557218859537152002801141174931847697 ...

64 बाइट्स या उससे कम में एक प्रोग्राम लिखें जो खिनचिन के स्थिरांक को सही दशमलव स्थानों की अधिकतम संख्या तक आउटपुट करता है।

  • हो सकता है कि आप खिनचिन के स्थिरांक से संबंधित किसी भी पुस्तकालय के निर्माण या कार्यों में सीधे उपयोग न करें। (उदा। Math.Khinchin (परिशुद्धता) निश्चित रूप से अनुमति नहीं है।)
  • आप लॉगरिथम, योग, आदि की गणना करने के लिए गणित पुस्तकालयों का उपयोग कर सकते हैं।
  • आप सभी को या आपके उत्तर के भाग को हार्डकोड कर सकते हैं
  • आपके कार्यक्रम को एक निश्चित रूप से आधुनिक कंप्यूटर (जैसे कि यहां सूचीबद्ध हैं ) पर एक घंटे से भी कम समय तक उत्पादन करना चाहिए ।
  • आपको stdout में आउटपुट करना होगा। कोई इनपुट नहीं है।
  • आप जब तक http://mothereff.in/byte-counter 64-बाइट्स या उससे कम वाले रजिस्टर का उपयोग कर सकते हैं ।

स्कोरिंग

आपका स्कोर खिनचिन के निरंतर आपके प्रोग्राम आउटपुट में क्रमिक अंकों की संख्या है, जो 2.68 से शुरू होता है ... आप गलत अंकों का उत्पादन कर सकते हैं, लेकिन केवल अंतिम सही अंक आपके स्कोर की ओर गिना जाता है।

उदाहरण के लिए, का एक आउटपुट

2.68545200 2 0653064453097148354817956938383822939344446295305115234555721

स्कोर 9 अंक होगा। प्रत्येक अंक के लिए एक 2 6 8 5 4 5 2 0 0लेकिन 2 के बाद कुछ भी नहीं है जो 1 होना चाहिए।


2
आप पूरे उत्तर को हार्डकोड करने की अनुमति क्यों दे रहे हैं?
विलियम बारबोसा

5
@WilliamBarbosa क्यों नहीं? आदर्श रूप से ऐसा समाधान होना चाहिए जो 31 से बेहतर स्कोर करे। यदि नहीं, तो यह दुर्भाग्यपूर्ण है।
मार्टिन एंडर

1
क्या यूनिकोड की अनुमति है? इसे कैसे गिना जाए?
aditsu

3
आपको 32 के बजाय 64 बी की अनुमति देनी चाहिए, और यूटीएफ -8 बाइट्स ( mothereff.in/byte-counter ) (= 1 से 4 बाइट्स प्रति यूनिकोड विमान के आधार पर) के रूप में सभी वर्णों को गिनना चाहिए। इसके अलावा, मौजूदा समाधानों को आसानी से 64b
xem

3
@PeterTaylor मैंने एक CJam फ़्लोटिंग-पॉइंट सॉल्यूशन को कोडित किया, और मैं आपको बता दूँ, सीमित परिशुद्धता मुख्य समस्या नहीं है: p
aditsu

जवाबों:


11

मेपल, 200+

निम्नलिखित मेपल कमांड खिनचिन के निरंतर अनुरोध के अनुसार निरंतरता की गणना करता है (यहां, 200 अंक):

evalf[200](exp(sum((-1)^k*(2-2^k)*ζ(1,k)/k,k=2..∞)/ln(2)));

यदि आप इसे मेपल ग्राफिकल इंटरफ़ेस में कॉपी-पेस्ट करते हैं तो यह कोड काम करना चाहिए। ζUTF-8 में दो बाइट्स, और ले जाता है 62 बाइट्स के लिए कुल तीन,।

उन प्रतीकों के ASCII संस्करणों को लिखते हुए, यहां तक ​​कि min()इसके बजाय का उपयोग करने की चाल के साथ infinity, अलस 66 तक बाइट गिनती लाता है:

evalf[200](exp(sum((-1)^k*(2-2^k)*Zeta(1,k)/k,k=2..min())/ln(2)));

गणना किए गए अंकों की संख्या को बाद में वर्ग कोष्ठक में संख्या को बदलकर आसानी से समायोजित किया जा सकता है evalf । मेरे बजाय पुराने कंप्यूटर पर, लगभग आधे घंटे में 200 अंक समाप्त हो रहे हैं; आपका अधिक सक्षम हो सकता है। ध्यान दें कि मेपल ने इसे रौंदने के बजाय अनुरोधित सटीकता के लिए परिणाम को गोल किया, इसलिए मिलान अंकों की वास्तविक संख्या कुछ हद तक कम हो सकती है।

स्थिरांक की गणना करने की यह विधि मैथवर्ल्ड पृष्ठ से फार्मूला (9) पर आधारित है, जिसे गोस्पर (1996, pers। कॉम।) का हवाला दिया गया है।

            समीकरण

यह सबसे प्रभावी तरीका था जिसे मैं (बमुश्किल) 64 बाइट्स या उससे कम में निचोड़ने में कामयाब रहा।


काफी साफ़। अगर केवल मेरे पास मेपल: /
केल्विन के

12

CJam - 118

2'."*;TeT?_aN{.i9B*ZEay
G`9~eW}nE=Lr-`B}    )D>9m9"136b

इसे http://cjam.aditsu.net/ पर आज़माएं

चूंकि स्टेक्सएक्सचेंज कुछ पात्रों को नष्ट कर देता है, यहां एक प्रोग्राम है जो ऊपर दिए गए प्रोग्राम को उत्पन्न करता है; पहले इसे चलाएं, फिर इसका आउटपुट चलाएँ:

"2'.\""685452001065306445309714835481795693820382293994462953051152345557218859537152002801141174931847697995153465905288090 136b:c"\"136b"

स्पष्टीकरण:

22
'.पुश करता है डॉट
"…"एक स्ट्रिंग है जिसमें एनकोडेड फॉर्म में बाकी अंकों को शामिल किया
128bजाता है, स्ट्रिंग को एक नंबर में परिवर्तित करता है, वर्णों को आधार 128 में अंकों के रूप में मानते हुए (उनके ASCII कोड के माध्यम से)


2
बहुत अच्छा। क्या आप इसे थोड़ा समझा सकते हैं?
काइल कानोस

@KyleKanos ने स्पष्टीकरण जोड़ा
aditsu

वह तो कमाल है। मुझे एक दिन CJam सीखना चाहिए ... साथ ही, मुझे ओपेरा वेब ब्राउज़र में काम करने के लिए आपका ऑनलाइन दुभाषिया नहीं मिल सकता है, हालांकि यह मेरे फ़ायरफ़ॉक्स पर काम करता है। संभवतः एक ओपेरा-मुद्दा, लेकिन मुझे लगा कि मैं इसका उल्लेख करूंगा।
काइल कानोस

1
@ केल्विन हॉबीज़ 1997 में जेवियर ग्रेडन ने सबसे अधिक 250HzHz प्रोसेसर का उपयोग करते हुए 22 घंटों में पहले 110,000 अंकों की गणना की। तो आप एक घंटे में इस समाधान के रूप में 1000 अंकों की गणना करने में सक्षम हो सकते हैं। web.archive.org/web/20120218093629/http://pi.lacim.uqam.ca/…
एलेक्स एल

1
@ केल्विन हॉबीज एक पूर्ण कार्यक्रम के लिए इस लिंक को देखते हैं जिसने कथित तौर पर 7 सेकंड में 2000 अंकों की गणना की है।
२०११

5

Kona ६३

सरल कठिन कोडित उत्तर:

2.68545200106530644530971483548179569382038229399446295305115234

mmm यह 63 नहीं है?
क्लेम

@xem: छोटी टंकण त्रुटि। फिक्स्ड। : D
काइल कानूनोस


@DigitalTrauma: संभवत: कई अन्य भाषाओं में भी काम करता है, मैं बस के साथ अटक गया हूं क्योंकि मैंने पहले भी इसका जवाब दिया है।
काइल कानोस

5

हास्केल, ५

खैर, चूंकि किसी ने वास्तविक गणित का उपयोग करके कोई समाधान नहीं पोस्ट किया है, इसलिए मैंने फैसला किया कि भले ही यह अन्य उत्तरों के समान ही निकट हो।

main=print$product[(1+1/r/(r+2))**2`logBase`r|r<-[1..99999999]]

यह गणना करता है 2.6854453689859192, जो स्थिरांक का एक संपूर्ण 5 वर्ण है। वोल्फ्राम सही था जब उन्होंने कहा कि "उच्च परिशुद्धता की गणना करना मुश्किल है"।


63 बाइट प्रोग्राम - 1 बाइट स्पेयर करने के लिए! अच्छा!
डिजिटल ट्रॉमा

अतिरिक्त बाइट एक और हो सकती है 9, लेकिन मेरा कंप्यूटर इसे संभाल नहीं सका और अगर यह भी हो सकता है, तो मुझे यकीन नहीं है कि यह एक और सटीक अंक में परिणाम देगा।
ज़ाक

रूबी का उपयोग करते हुए, मैं मूल रूप से इस फॉर्मूले का उपयोग करके अधिकतम हिट कर सकता हूं, इसे 60 सेकंड में चला रहा हूं। मुझे मिला 2.685451312659854: tio.run/##KypNqvz/P9vWkEvDUE/…
बस सुंदर कला

3

गणितज्ञ, ६

(Times@@Rest@ContinuedFraction[Pi,977])^(1.`9/976)

देता है

2.68545843

और केवल 50 बाइट्स का उपयोग करता है, इसलिए कुछ बेहतर खोजने के लिए Piऔर एक बड़े निरंतर अंश का उपयोग करने के लिए कुछ जगह है , लेकिन मुझे यकीन नहीं है कि यह एक घंटे के रनटाइम के साथ बहुत बेहतर होगा। (खासकर जब से मैं सिर्फ ब्रूट बल का उपयोग कर रहा हूं तो बेहतर संयोजन खोजने में शायद कई दिन लगेंगे।)

(निश्चित रूप से, आप इसे अस्वीकार करने के लिए पर्याप्त चतुर थे Khinchin~N~2000, जहां 2000किसी भी संख्या के साथ प्रतिस्थापित किया जा सकता है जो आपको एक घंटे के भीतर परिणाम देता है।)


1
निरंतर के अर्थ का उपयोग करने के लिए +1, न कि केवल एक सूत्र।
वि।

2

wxMaxima 3

वास्तव में गणना की गई विधि!

bfloat(product((1+1/(n*(n+2)))^(log(n)/log(2)),n,1,10000));

लगभग 25 मिनट के बाद, यह वापस आ गया

2.681499686663101b0

अब मुझे समझ में आया कि गणितज्ञ पृष्ठ ने ऐसा क्यों कहा। मेरे साथ खेलने के लिए 6 वर्ण हैं, लेकिन मैं 6 0 के (6) में चलाने की कल्पना नहीं कर सकता <60 मिनट और (ख) मुझे एक अधिक सटीक समाधान दे।


संदेह: प्रत्येक अतिरिक्त शून्य एक से अधिक सही अंक जोड़ता है: '(
बस सुंदर कला

1

जीएनयू बीसी , 5 अंक (54 बाइट कार्यक्रम)

वास्तव में गणना करने का प्रयास। जीएनयू बीसी बुरी तरह से धीमा है। यह एक 2012 -14 मैकबुक प्रो रेटिना पर चलने वाले उबंटू 14.04 वीएम पर 53 मिनट तक चला। अजीब तरह से यह OSX नंगे धातु की तुलना में वीएम में तेजी से चलता है - संभवतः जीएनयू संस्करण बीएसडी संस्करण की तुलना में इस कार्य के लिए बेहतर रूप से अनुकूलित है।

for(k=r=1;r++<10^7;)k*=e(l(1/(r*(r+2))+1)*l(r)/l(2))
k

आउटपुट:

2.68544536902156538295

ध्यान दें:

bc -le()और l()फ़ंक्शंस (और सेटिंग स्केल = 20) के लिए उपयोग करने की आवश्यकता है ।


1

सीजेम फ्लोटिंग पॉइंट गणना - 6

1e8{I{1.II2+*/)I2mL#*}1.?}fI

यह मूल 32 बाइट्स में फिट बैठता है :)

जावा 8 का उपयोग करके जावा दुभाषिया के साथ चलना, यह मेरे लैपटॉप पर लगभग एक मिनट के बाद इसे आउटपुट करता है:

2.6854513126595827

ऑनलाइन दुभाषिया को शायद बहुत लंबा समय लगेगा।


1

पायथन, 64 66

print"2.%i"%int('anljsgqif7gwwwsrntcz7zv2obv6gv5us7fzfwjcaj',36)

आउटपुट:

2.68545200106530644530971483548179569382038229399446295305115234555

printकिसी अन्य पात्र में निचोड़ने के बाद आप स्थान को काट सकते हैं ।
xnor

1

रूबी - 73

दुर्भाग्य से, आप केवल to_iरूबी में 36 बेस का उपयोग कर सकते हैं :

"2.#{"hmegxpkvliy1vaw4lb054ep8wsqwkz2yx9cm9jvc9yfd48j".to_i 36}"

जो लौटता है

"2.6854520010653064453097148354817956938203822939944629530511523455572188595"

1

RPL / 2, 7 परिकलित अंक, 61 बाइट्स

'LN(FLOOR(1/X))/(X+1)/LN(2)' { 'X' 1e-9 1 } 1e-7 INT DROP EXP

अपने पुराने (Intel Core2) लैपटॉप पर एक मिनट में 2.68545210493822 देता है।

जहाँ तक मुझे पता है RPL / 2 में कोई ज़ेटा फ़ंक्शन नहीं है, यही कारण है कि मैंने एकीकरण (मैथवर्ल्ड पृष्ठ से सूत्र 15) का उपयोग किया है। सिद्धांत रूप में 1e-9 और 1e-7 को छोटी संख्या से बदलकर सटीकता में सुधार किया जा सकता है, लेकिन मुझे स्पष्ट रूप से इसके लिए स्मृति की कमी थी।

बेशक अनंत उत्पाद का सहारा लेना इस बिंदु को हल करता है, ऐसा लगता है

1 1 1e9 FOR I 1 1 I dup 2 + * / + I LN 2 LN / ^ * NEXT

और एक HP RPL कैल्क के रूप में काम करेगा, लेकिन यह परिमाण धीरज के दो क्रम में बदल जाता है (लैपटॉप पर, मेरे HP पर प्रयास नहीं किया गया!), और केवल 6 अंक देता है।

तो RPL / 2 में एकीकरण एल्गोरिथ्म वास्तव में काफी अच्छा काम करता है।


0

कई भाषाएं, 61

क्षमा करें, बेहतर समाधान नहीं मिला।

"2.685452001065306445309714835481795693820382293994462953051152"

नियम यह नहीं कहते हैं कि सही संख्या अनुक्रम उद्धरण से पहले नहीं हो सकता है, इसलिए मैं इसका उपयोग कर रहा हूं। उदाहरण के लिए JS कंसोल में इसे निष्पादित करने पर, आपको उद्धरण सहित समान स्ट्रिंग मिलेगी।


1
हां, यह एक उद्धरण के साथ भी मान्य है। यह केवल मायने रखता है कि 2.685 ... निर्बाध है।
केल्विन के

0

अजगर (5)

x=3**.1
p=1
for _ in[1]*10**6:p*=(x//1)**1e-6;x=1/(x%1)
print(p)

Output: 2.6854396408091694

(आउटपुट ~ 2 सेकंड लेता है।)

अन्य गणित समाधानों के साथ एकजुटता में, मैं एक और भी बदतर रूपांतरित कर दूंगा जो कि पहले मनमाने-ईश अपरिमेय संख्या के पहले मिलियन जारी अंश गुणांक के ज्यामितीय माध्य की गणना करता है जो काम न करने के लिए जाना जाता प्रकार का नहीं है। वास्तव में, मैंने उस नंबर को कुछ प्रयास करके तब तक रगड़ा जब तक कि मुझे एक अतिरिक्त अंक पर संयोग नहीं मिला।

अजीब बात यह है: मैं अपने कंप्यूटर पर रोक लगा दी और जगह का अजगर गोल्फ चाल के साथ इस कोड को छोटा करने की कोशिश कर के बाद एक कठिन बंद करना पड़ा for _ in[1]*10**6:codeसाथ exec("code"*10**6)


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