फाइबोनैचि कार्यक्रम की लंबाई


14

लंबाई के साथ एक प्रोग्राम लिखें n जो दूसरे प्रोग्राम को आउटपुट करता है जिसकी लंबाई n के बाद अगला फाइबोनैचि संख्या है। नए प्रोग्राम को एक ही काम करना चाहिए - दूसरे प्रोग्राम को आउटपुट करना जिसकी लंबाई अगले फाइबोनैचि संख्या है, आदि
n n (मूल प्रोग्राम की लंबाई) के लिए एक फाइबोनैचि संख्या होना आवश्यक नहीं है, हालाँकि यह अच्छा होगा।

सबसे छोटा कोड जीतता है।

कोई बाहरी संसाधन, केवल ASCII, मुफ्त संकलक / दुभाषिया की आवश्यकता नहीं है।
यदि आपका आउटपुट एक नई पंक्ति में समाप्त होता है, तो इसे भी गिना जाता है।


क्या इसे हमेशा जारी रखने की आवश्यकता है? ( intया BigInteger)
जस्टिन

1
@Quincunx यह ठीक है अगर यह इंट की सीमा या संकलक / दुभाषिया की सीमा पर काम करना बंद कर देता है, जो भी पहले आता है। मुझे उम्मीद है कि यह 10000+ तक पहुंच जाएगा।
aditsu छोड़ दिया क्योंकि एसई ईवीआईएल

1
व्हाट्सएप या टिप्पणियों या मनमाने ढंग से लंबे चर / फ़ंक्शन / वर्ग के नामों के उपयोग पर प्रतिबंध या तो मूल या बाद में उत्पादित कार्यक्रमों में हैं?
जोनाथन पुलानो

1
क्या प्रोग्राम अपना स्वयं का सोर्स कोड पढ़ सकता है, या क्या आप एक सच्चे क्वैसी-क्वीन की तलाश कर रहे हैं?
हिस्टोक्रेट

जवाबों:


5

सीजाम, २६ २३

मुझे बस आपकी भाषा के साथ एक कोशिश करनी थी।

7{9\@5mq)2/*')*\"_~"}_~

9 है (22*0.618 + 0.5 - 1)/1.618 + 1

यह *1.618दो नंबरों को बार-बार जोड़ने के बजाय अपनी लंबाई की गणना करता है । पहले संस्करण में, यह आउटपुट को पहले की {तरह भर देगा 1))))))))), जो उन वर्णों को स्वयं गिनता है। परिणाम कहो n। कुल लंबाई है n+22, और पहले नई लंबाई {होनी चाहिए (n+22)*1.618-22, गोल। इसे घटाकर एक की संख्या गिनें )। तब यह लगभग बराबर होगा (n+8)*1.618

पुराना संस्करण:

-3{1\@5mq)2/*E+')*\"_~"}_~

संख्या 14 है 24*0.618 + 0.5 - 1


बहुत प्रभावशाली!
डेनिस

मुझे लगता है कि हमारे पास एक नया विजेता है :)
एडिट्स ने छोड़ दिया क्योंकि एसई ईवीआईएल

7

पायथन 2, 160 बाइट्स

s='s=%s;c=s;l=len(s%%c)+4;a,b=1,1\nwhile b<l:a,b=b,a+b\nc+="1"*(b-l-1);print s%%`c`;a=1'
c=s
l=len(s%c)+4
a,b=1,1
while b<l:a,b=b,a+b
c+="1"*(b-l-1)
print s%`c`

यह एक सच्ची अर्ध-रानी है; यह अपने स्रोत को नहीं पढ़ता है, लेकिन यह इसे उत्पन्न करता है। पहला आउटपुट (नई अनुगामी अनुगामी है):

s='s=%s;c=s;l=len(s%%c)+4;a,b=1,1\nwhile b<l:a,b=b,a+b\nc+="1"*(b-l-1);print s%%`c`;a=111111111111111111111111111111111111111111111111111111111111111111111';c=s;l=len(s%c)+4;a,b=1,1
while b<l:a,b=b,a+b
c+="1"*(b-l-1);print s%`c`;a=1

दूसरा:

s='s=%s;c=s;l=len(s%%c)+4;a,b=1,1\nwhile b<l:a,b=b,a+b\nc+="1"*(b-l-1);print s%%`c`;a=1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111';c=s;l=len(s%c)+4;a,b=1,1
while b<l:a,b=b,a+b
c+="1"*(b-l-1);print s%`c`;a=111111111111111111111111111111111111111111111111111111111111111111111

संपादित करें: उफ़। जब मैं ;एस से एस में बदल गया 1, तो स्ट्रिंग को बदलना भूल गया , इसलिए दूसरा आउटपुट अतिरिक्त अर्धविराम (जो पायथन समर्थन करता है) का उत्पादन कर रहा था। फिक्स्ड


मुझे डर है कि यह लगभग 3 पुनरावृत्तियों के बाद काम करना बंद कर देता है ...
एडित्सू ने छोड़ दिया क्योंकि एसई EVIL

@aditsu क्या? अजगर एक पूर्णांक के आकार पर एक सीमा है ?! (या यह है कि गिनती नहीं है एक / skips / कुछ और?) ओह रुको। ओह। मैं स्ट्रिंग XD
जस्टिन

7

CJam, 41 31 बाइट्स

{1$+S@]_1=4+1$`,-S*"2$~"}21D2$~

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

उत्पादन

$ cjam <(echo '{1$+S@]_1=4+1$`,-S*"2$~"}21D2$~'); echo
{1$+S@]_1=4+1$`,-S*"2$~"}34 21 2$~
$ cjam <(echo '{1$+S@]_1=4+1$`,-S*"2$~"}21D2$~') | wc -c
34
$ cjam <(cjam <(echo '{1$+S@]_1=4+1$`,-S*"2$~"}21D2$~')); echo
{1$+S@]_1=4+1$`,-S*"2$~"}55 34                      2$~
$ cjam <(cjam <(echo '{1$+S@]_1=4+1$`,-S*"2$~"}21D2$~')) | wc -c
55
$ cjam (cjam <(cjam <(echo '{1$+S@]_1=4+1$`,-S*"2$~"}21D2$~'))); echo
bash: syntax error near unexpected token `cjam'
$ cjam <(cjam <(cjam <(echo '{1$+S@]_1=4+1$`,-S*"2$~"}21D2$~'))); echo
{1$+S@]_1=4+1$`,-S*"2$~"}89 55                                                        2$~
$ cjam <(cjam <(cjam <(echo '{1$+S@]_1=4+1$`,-S*"2$~"}21D2$~'))) | wc -c
89

यह काम किस प्रकार करता है

{       "                                                   {…} 21 13                     ";
  1$+   " Duplicate the higher number and add.              {…} 21 34                     ";
  S@    " Push a space and rotate the lower number on top.  {…} 34 ' ' 21                 ";
  ]     " Wrap the stack into an array.                     [ {…} 34 ' ' 21 ]             ";
  _1=   " Push the second element of the array.             [ {…} 34 ' ' 21 ] 34          ";
  4+    " Add 4 to it.                                      [ {…} 34 ' ' 21 ] 38          ";
  1$`,  " Push the length of the stringified array.         [ {…} 34 ' ' 21 ] 38 37       ";
  -S*   " Subtract and push that many spaces.               [ {…} 34 ' ' 21 ] ' '         ";
  "2$~" " Push the string '2$~'.                            [ {…} 34 ' ' 21 ] ' ' '2$~'   ";
}       "                                                   {…}                           ";

21D     " Push 21 and 13.                                   {…} 21 13                     ";
2$~     " Copy the code block an evaluate.                  [ {…} 34 ' ' 21 ] ' ' '2$~'   ";

2
अच्छा, 1 मिलियन तक की पुष्टि की गई :) मुझे लगता है कि यह स्पष्टीकरण में 39 के बजाय 37 है।
aditsu छोड़ दिया क्योंकि SE

@aditsu: अभी तक आपने अपनी टिप्पणी संपादित नहीं की थी। यह वास्तव में 37 होना चाहिए, धन्यवाद।
डेनिस

6

अजगर - 89

g="%(s,b,a+b);print o.ljust(b-1)";s,a,b="s,a,b=%r,%i,%i;o=s%"+g,89,144;exec("o=s"+g)#####

मेरा परफेक्ट कैरेक्टर काउंट खत्म हो गया है । ; _; नई बात और क्विनकुनक्स को इंगित करने के लिए TheRare के लिए धन्यवाद, मैं सुझाव देता हूं कि मैं पायथन 2 का उपयोग करता हूं, 2 चार्ट से शेविंग करता हूं।

संपादित करें : अब सिर्फ #एस के बजाय अधिक एस का उपयोग करता है 1; 12 चरस छोटी।

EDIT 2 : 94 चरस! कुछ पुनरावृत्ति को हटा दिया। >: 3

EDIT 3 : अजगर ने 2 पायथन के लिए वैकल्पिक विकल्प खोले।

EDIT 4 : आउटपुट अब छोटा चरित्र है।

EDIT 5 : %rइसे छोटा करने का उपयोग @primo द्वारा एक अन्य प्रश्न के उत्तर से लिया गया था।

EDIT 6 : छोटा। : डी

यहाँ एक पायथन 3 संस्करण है:

g="%(s,b,a+b);print(o.ljust(b-1))";s,a,b="s,a,b=%r,%i,%i;o=s%"+g,89,144;exec("o=s"+g)####

यह उत्तर @Quincunx के समान है।


printजब तक आप end=''तर्क निर्दिष्ट नहीं करते, हमेशा एक नई पंक्ति जोड़ता है ।
देखिए

पायथन 2 का उपयोग क्यों नहीं किया जाता ?:s,a,b="s,a,b=%s,%i,%i;o=s%%(`s`,b,a+b)+'#';print o+(b-len(o)-1)*'1'",89,144;o=s%(`s`,b,a+b)+'#';print o+(b-len(o)-1)*'1'
जस्टिन

@Quincunx मैं करूँगा!
साभार

आपका ९ ०-चार कार्यक्रम अजगर ३ के साथ काम नहीं करता है, और इसमें १४५-चार आउटपुट (एक फिबोनाची संख्या नहीं) है
एडिट्स ने छोड़ दिया क्योंकि एसई EVIL

@aditsu फिक्स्ड। : 3
cjfaure

2

जावास्क्रिप्ट, 94

(function q(w,e){return ('('+q+')('+e+','+(s=w+e)+')'+Array(s).join('/')).substr(0,s)})(55,89)

एक प्रसिद्ध जावास्क्रिप्ट क्वीन के आधार पर , यह लगभग एक ही फ़ंक्शन देता है, केवल स्लैश की मात्रा का अनुसरण करता है, जैसे कि यह 144 तक बैठता है जो एन के बाद अगला फाइबोनैचि संख्या है और इसी तरह ...

एन एक फाइबोनैचि संख्या नहीं है, लेकिन यह केवल "अच्छा है" था।


यह सही ढंग से काम नहीं करता है जब यह 1000 से गुजरता है
एडिट्स ने छोड़ दिया क्योंकि एसई ईवीआईएल

1000 क्या? पुनरावृत्ति की?
जैकब

नहीं, प्रोग्राम की लंबाई
एडिट्स छोड़ दिया क्योंकि एसई ईवीआईएल

हम्म ... मैं इसे क्रोम के कंसोल में उपयोग कर रहा था, p = (my answer)और फिर p = eval(p)एक-दो बार, और 196418 तक प्राप्त किया ... उसके बाद प्रसंस्करण समय था> 1 सेकंड इसलिए मैंने परीक्षण छोड़ दिया: पी, लेकिन मुझे लगता है कि यह और भी अधिक जारी रह सकता है।
जैकब

आप समझ नहीं रहे हैं .. मैंने नहीं कहा कि यह काम करना बंद कर देता है या यह बहुत धीमा है। मैंने कहा कि यह सही ढंग से काम नहीं करता है। बस मत करो p=eval(p), यह भी जाँच करें p.length। इसे 987 करने के बाद, मुझे 1598 की लंबाई मिलती है, न कि एक फिबोनाची संख्या।
एडिट्स ने छोड़ दिया क्योंकि SE को EVIL

0

मेथेमेटिका

({0};
 With[{n = Ceiling[ InverseFunction[Fibonacci]@LeafCount@#0 ], l = Length[#0[[1, 1]]]},
    #0 /. {0..} -> ConstantArray[0, Fibonacci[n+1] - LeafCount[#0] + l]
 ]) &

यह एक बहुत ही सीधा क्रियान्वयन है (अर्थात यहाँ कोई आडम्बर नहीं है)। यह एक अनाम फ़ंक्शन है जो सही लंबाई प्राप्त करने के लिए थोड़े से पैडिंग के साथ वापस आता है। Mathematica homoiconic है: कोड और डेटा दोनों को Mathematica अभिव्यक्तियों के रूप में दर्शाया जाता है, जो मक्खी पर कोड को संशोधित / उत्पन्न करने के लिए वास्तविक रूप से आसान बनाता है। इसका मतलब यह भी है कि वर्ण गणना कोड लंबाई का एक प्राकृतिक माप नहीं है। एपेक्स्रेशन का आकार ( "लीफ काउंट" ) है। यह संस्करण कोड लंबाई माप के रूप में लीफ काउंट्स पर आधारित है।

यदि हम इस अनाम फ़ंक्शन को एक वैरिएबल पर असाइन करते हैं f(इसलिए मैं दिखा सकता हूं कि क्या पठनीय तरीके से होता है), और इसे 1, 2, 3, ... बार कॉल करते रहें, हर बार रिटर्न मान की लंबाई को मापते हुए, यह वही है जो हमें मिला:

In[]:= f // LeafCount
Out[]= 42

In[]:= f[] // LeafCount
Out[]= 89

In[]:= f[][] // LeafCount
Out[]= 144

In[]:= f[][][] // LeafCount
Out[]= 233

नि: शुल्क दुभाषिया आवश्यकता के बारे में: रास्पबेरी पाई के लिए गणितज्ञ स्वतंत्र है। अन्यथा यह कोड मैथिक्स (ओपन सोर्स) में पोर्ट के लिए सीधा होना चाहिए । मैथिक्स से केवल एक चीज गायब है InverseFunction, जिसे यहां के रूप में प्रतिस्थापित किया जा सकता है (लेकिन मैं आलसी हूं :)।


वाह, मुझे नहीं पता था कि गणितज्ञ पाई के लिए स्वतंत्र था, मुझे इसकी जांच करनी चाहिए। हालाँकि, प्रोग्राम मानक आउटपुट के लिए अक्षरों को प्रिंट करने वाला होता है, और इसे ही गिना जाना चाहिए।
एडित्सू ने छोड़ दिया क्योंकि SE को EVIL

@aditsu वास्तव में मैंने इसे चुनौती में प्रतिस्पर्धा करने के लिए मज़े के लिए किया था, और LeafCountचरित्र गणना का उपयोग करने की तुलना में बहुत अधिक दिलचस्प लग रहा था (जो कि स्ट्रिंग-हेरफेर के रूप में कोड-हेरफेर को उबाऊ बना देगा)। :-) मैं वर्ण गणना का उपयोग करने के लिए इसे बदलने नहीं जा रहा हूं, लेकिन यदि आप चाहें तो मैं इसे बिना किसी बुरी भावना के हटा सकता हूं।
ज़ाबोलक्स

ओह मैं समझा। बस इसे छोड़ दें, फिर हटाने की आवश्यकता नहीं है।
एडित्सो ने छोड़ दिया क्योंकि SE 17:36 पर EVIL

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