Nth फाइबोनैचि संख्या से युक्त nth फाइबोनैचि संख्या प्रिंट करें!


22

चुनौती

आपको एक प्रोग्राम लिखना चाहिए जो nइनपुट के रूप में एक सकारात्मक पूर्णांक लेता है , और nवें फाइबोनैचि संख्या को आउटपुट करता है (संक्षेप में फाइब # भर में) जिसमें nवें फ़िब # एक सबरिंग के रूप में शामिल है। इस चुनौती के उद्देश्यों के लिए, फिबोनाची अनुक्रम एक के साथ शुरू होता है 1

यहां कुछ उदाहरण दिए गए हैं जिनका उपयोग आप परीक्षण मामलों के रूप में कर सकते हैं, या उदाहरण के रूप में चुनौती को स्पष्ट करने के लिए (बाद के लिए, कृपया नीचे दिए गए एक टिप्पणी को छोड़ कर स्पष्ट करें कि आपको क्या अस्पष्ट लगता है)।

n=1
Fib#s: 1
       ^1 1st Fib# that contains a 1 (1st Fib#)
Output: 1

n=2
Fib#s: 1, 1
       ^1 ^2 2nd Fib# that contains a 1 (2nd Fib#)
Output: 1

n=3
Fib#s: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233
             ^1              ^2                   ^3 3rd Fib# that contains a 2 (3rd Fib#)
Output: 233

n=4
Output: 233

n=5
Output: 6765

n=6
Output: 28657

n=7
Output: 1304969544928657

n=8
Output: 14472334024676221

n=9
Output: 23416728348467685

n=10
Fib#s: 1, ..., 34, 55, 89, ..., 63245986, 102334155, 165580141, ..., 2880067194370816120, 4660046610375530309
                   ^1                     ^2         ^3                                   ^10 10th Fib# that contains a 55 (10th Fib#)
Output: 4660046610375530309

हमेशा की तरह, यह , इसलिए संभव सबसे कम बाइट के लिए जाएं।

यदि कुछ भ्रमित / अस्पष्ट है, तो कृपया एक टिप्पणी छोड़ दें।

(यह चुनौती मेरे द्वारा पोस्ट की गई एक और चुनौती पर आधारित है: n प्रधानमंत्री को प्रिंट करें जिसमें n शामिल है )


3
मैं n=5टेस्टकेस को शामिल करने की सलाह देता हूं , क्योंकि मैंने सिर्फ एक मूर्खतापूर्ण त्रुटि की थी जहां मैंने एक चेक लिखा था जो एक संख्या को कई बार गिना था यदि इसमें एक से अधिक बार सबस्ट्रिंग था। n=5की वजह से है कि पकड़ होगा 55
अर्जन जोहान्सन

2
@officialaimm मुझे नहीं लगता कि बहुत अधिक संख्या की उम्मीद करना उचित है। मेरा समाधान TIO तक काम करता है n=25(आउटपुट में 1186 अंक हैं), फिर n=26(अपने लैपटॉप पर संकलित 3085 अंक ) के लिए मारा जाता है । ऐसा लगता है कि जब भी fib(n)एक और अंक मिलेगा (जैसा कि कोई उम्मीद करेगा) मुश्किल में कूद जाएगा। अगली कूद, 31, अंतिम आउटपुट में 12990 अंक हैं।
अर्जन जोहानसन

1
हाँ। जबरदस्त हंसी! मेरा अजगर समाधान n> 6 के लिए अटक जाता है क्योंकि एक पुनरावर्ती कार्य होता है जिसे लूप में कई बार कहा जाता है। : डी
आधिकारिक

1
@officialaimm ओह राइट, एक्सपोनेंशियल ब्लोअप एक समस्या है जब रिबोरशन के साथ सीधे फाइबोनैचि को परिभाषित करता है। यहां तक ​​कि इसके बिना आप जल्द ही अजगर की पुनरावृत्ति सीमा को मार सकते हैं।
अर्जन जोहान्सन

1
@ शैगि: जिसका मतलब है कि मैं सुसंगत है: जब 0 0 फिबोनाची संख्या है, तो 1 पहली ("1 वीं") फिबोनाची संख्या है।
श्रीवत्सआर

जवाबों:


12

हास्केल , 85 84 बाइट्स

संपादित करें:

  • -1 बाइट: लाईकोनी छोटा l
  • स्पष्टीकरण में टाइपो (के x>=sलिए x<=s)।

fएक लेता है Intऔर एक रिटर्न देता है String

l=0:scanl(+)1l
m=show<$>l
f n|x<-m!!n=[y|y<-x:m,or[x<=s|s<-scanr(:)""y,x++":">s]]!!n

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

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

  • lफाइबोनैचि संख्याओं की अनंत सूची है, जिसे आंशिक रूप से आंशिक रूप से परिभाषित किया गया है 0:1:l। इसके साथ शुरू होता है 0क्योंकि सूची 0-अनुक्रमित हैं। mउसी सूची को स्ट्रिंग में परिवर्तित किया जाता है।
  • इन f:
    • nइनपुट संख्या है, और वें Fibnote नंबर xकी (स्ट्रिंग है) n
    • बाहरी सूची की समझ में, yयह एक विकल्प के xरूप में शामिल है या नहीं, इसके लिए परीक्षण किया गया एक फाइबोनैचि संख्या है । पासिंग yएस को सूची में एकत्र किया जाता है और !!nआउटपुट देने के लिए अंतिम के साथ अनुक्रमित किया जाता है । अंत में xउपयोग करके दो बाइट को बचाने के लिए परीक्षणों के लिए एक अतिरिक्त तैयार किया गया है !!(n-1)
    • yकई बार मतगणना से बचने के लिए , प्रत्येक के परीक्षण में yलिपटे होते हैं orऔर दूसरी सूची समझ में आती है।
    • आंतरिक सूची की समझ में, sप्रत्ययों के माध्यम से पुनरावृति होती है y
    • यह देखने के लिए कि क्या xउपसर्ग है s, हम जाँचते हैं कि क्या x<=sऔर क्या x++":">s। ( ":"कुछ हद तक मनमाना है लेकिन किसी भी अंक से बड़ा होना चाहिए।)

1
l=0:scanl(+)1lएक बाइट बचाता है।
लकोनी


4

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

f=n=input()
b=i=x=-1
a=1
while(n>2)*f:i+=1;a,b=a+b,a;x=[x,a][i==n];f-=`x`in`a`
print a

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

स्पष्टीकरण:

f=n=int(input())                 # f is number of required numbers

b=i=x=-1                         # i is index(counter) set at -1
                                 # In Two-sided fibonacci, fib(-1) is 1 
                                 # and b(fib before it) i.e. fib(-2) is -1
                                 # Taking advantage of all -1 values, x is 
                                 # also set to -1 so that the `if str(...`
                                 # portion does not execute until x is set a 
                                 # value(i.e. the nth fibonacci) since there 
                                 # is no way -1 will be found in the number 
                                 # (ALL HAIL to Orjan's Genius Idea of using 
                                 # two-sided fibonacci)      

a=1                              # fib(-1) is 1


while(n>2)*f:                    # no need to perform this loop for n=1 and 
                                 # n=2 and must stop when f is 0

 i+=1                            # increment counter

 b,a=a,a+b                       # this might be very familiar (fibonacci 
                                 # thing ;))                         

 x=[x,a][i==n]                   # If we have found (`i==n`) the nth 
                                 # fibonacci set x to it

 f-=`x`in`a`                     # the number with required substring is 
                                 # found, decrease value of f

print a                          # print required value

पायथन 3 , 126 120 113 112 110 101 99 बाइट्स

f=n=int(input())
b=i=x=-1
a=1
while(n>2)*f:i+=1;a,b=a+b,a;x=[x,a][i==n];f-=str(x)in str(a)
print(a)

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


1
आप शुरू करने b=i=x=-1 a=1और छोड़ने के साथ 7 और बाइट्स से छुटकारा पा सकते हैं x and । (अनिवार्य रूप से दो-तरफा फाइबोनैचि अनुक्रम -1, 1, 0, 1, 1, 2, .... में 3 चरण पहले शुरू)
अर्जन जोहान्सन

1
आपने अंत में एक स्थान छोड़ा -1: पी
अर्जन जोहान्सन

1
एर्म ब्लश । इसके अलावा, मैं `और n> 2` से छुटकारा पाना चाहता हूं लेकिन ऐसा लगता है कि n==2वास्तव में विशेष उपचार की आवश्यकता है। लेकिन इसे छोटा किया जा सकता है *(n>2)
अर्जन जोहान्सन

1
यह 88 बाइट्स के लिए नीचे गिरा , कुछ परिवर्तन अजगर 2 के लिए विशेष हैं। लेकिन बाकी अजगर 3 में भी काम करेंगे
फेलिप नारदी बतिस्ता

1
अजगर 3 के लिए, आप अभी भी गोल्फ 9 बाइट्स कर सकते हैं: यहाँ
फेलिप नारदी बतिस्ता

4

जावा, 118 111 बाइट्स

i->{long n=i,p=0,q,c=1;for(;--n>0;p=c,c+=q)q=p;for(n=c;i>0;q=p,p=c,c+=q)if((""+c).contains(""+n))--i;return p;}

मुझे लगता है कि यह संभव होना चाहिए कि फिबोनाची बिट को डुप्लिकेट न करें, लेकिन मेरे सभी प्रयासों का परिणाम किसी भी तरह से अधिक बाइट्स में होता है।

सुधार के लिए केविन के लिए धन्यवाद ... लगता है यह दिखाता है कि यह गोल्फ में मेरा पहला प्रयास था :)


2
स्निपेट की अनुमति नहीं है। आपको इसे एक लैम्ब्डा में बदलना चाहिए जैसे: i->{long n=i,p=0,q,c=1;while(--n>0){q=p;p=c;c+=q;}n=c;while(i>0){if((""+c).contains(""+n))--i;q=p;p=c;c+=q;}return p;}(118 बाइट्स)
ओकेक्स

1
PPCG में आपका स्वागत है! जब आप इसे एक लैम्ब्डा में बदल देते हैं, तो @ ऑक्स ने बताया, मुझे कहना होगा कि यह एक प्रभावशाली उत्तर है। मैंने इस चुनौती को दोपहर के भोजन से ठीक एक घंटे पहले करने की कोशिश की, और हार मान ली। तो +1 मुझसे। गोल्फ के लिए कुछ छोटी चीजें: while(--n>0){q=p;p=c;c+=q;}हो सकती हैं for(;--n>0;p=c,c+=q)q=p;और n=c;while(i>0){if((""+c).contains(""+n))--i;q=p;p=c;c+=q;}हो सकती हैं for(n=c;i>0;q=p,p=c,c+=q)if((""+c).contains(""+n))--i;। (कुल में: i->{long n=i,p=0,q,c=1;for(;--n>0;p=c,c+=q)q=p;for(n=c;i>0;q=p,p=c,c+=q)if((""+c).contains(""+n))--i;return p;}( 111 बाइट्स )
केविन क्रूज़सेन

2

पर्ल 6 , 45 बाइट्स

{my@f=0,1,*+*...*;@f.grep(/$(@f[$_])/)[$_-1]}

$_फ़ंक्शन का तर्क है; @fफाइबोनैचि अनुक्रम है, आलसी उत्पन्न।


2

जावास्क्रिप्ट (ईएस 6), 96 93 92 90 86 बाइट्स

0-अनुक्रमित, अनुक्रम में 0 वें नंबर के साथ 1। पर बाहर क्रेप्स 14

f=(n,x=1,y=1)=>n?f(n-1,y,x+y):x+""
g=(n,x=y=0)=>x>n?f(y-1):g(n,x+!!f(y++).match(f(n)))
  • 2 6 बाइट्स ने अरनौलड को धन्यवाद दिया

कोशिश करो

f=(n,x=1,y=1)=>n?f(n-1,y,x+y):x+""
g=(n,x=y=0)=>x>n?f(y-1):g(n,x+!!f(y++).match(f(n)))
oninput=_=>o.innerText=(v=+i.value)<14?`f(${v}) = ${f(v)}\ng(${v}) = `+g(v):"Does not compute!"
o.innerText=`f(0) = ${f(i.value=0)}\ng(0) = `+g(0)
<input id=i min=0 type=number><pre id=o>


व्याख्या

अनुसरण करने के लिए अपडेट किया गया संस्करण, जब मुझे एक मिनट मिलता है।

f=...                   :Just the standard, recursive JS function for generating the nth Fibonacci number
g=(...)=>               :Recursive function with the following parameters.
n                       :  The input integer.
x=0                     :  Used to count the number of matches we've found.
y=0                     :  Incremented on each pass and used to generate the yth Fibonacci number.
x>n?                    :If the count of matches is greater than the input then
f(y-1)                  :    Output the y-1th Fibonacci number.
:                       :Else
g(...)                  :    Call the function again, with the following arguments.
n                       :      The input integer.
x+                      :      The total number of matches so far incremented by the result of...
RegExp(f(n)).test(f(y)) :        A RegEx test checking if the yth Fibonacci number, cast to a string, contains the nth Fibonacci number.
                        :        (returns true or false which are cast to 1 and 0 by the addition operator)
y+1                     :      The loop counter incremented by 1

आपका उत्तर उदाहरणों से अलग आउटपुट प्रदान करता है।
ericw31415

@ ericw31415, ऐसा इसलिए है क्योंकि यह 0-अनुक्रमित है।
झबरा

मैंने विशेष रूप से यह लिखा है, हालांकि: "इस चुनौती के प्रयोजनों के लिए, फिबोनाची अनुक्रम 1 से शुरू होता है।"
ericw31415

@ ericw31415: और मेरा अनुक्रम 1 से शुरू होता है, यह सिर्फ 0-अनुक्रमित है; अनुक्रम में 0 और पहली संख्या 1 हैं, 2 है 2, 3 है 3, 4 है 5, 5 वीं है 8, और इसी तरह, और आगे।
झबरा



1

गणितज्ञ, 85 बाइट्स

(i=ToString;f=Fibonacci;For[n=t=0,t<#,If[i@f@n++~StringContainsQ~i@f@#,t++]];f[n-1])&

इनपुट

[10]

-4 बाइट्स @ जुंगहवन मिन से

उत्पादन

4660046610375530309


2
अजीब लगता f@i@n++है, लेकिन पूरी तरह से वैध है, 1 बाइट कम करना। 3 बाइट्स कम Forकरने के बजाय का उपयोग करना While। 85 बाइट्स:(i=ToString;f=Fibonacci;For[n=t=0,t<#,If[i@f@n++~StringContainsQ~i@f@#,t++]];f[n-1])&
जंगवान मिन


1

आर, 77 72 बाइट्स

F=gmp::fibnum;i=0;d=n=scan();while(n)if(grepl(F(d),F(i<-i+1)))n=n-1;F(i)

यह gmpफाइबोनैचि संख्या के लिए लाइब्रेरी का उपयोग करता है । सवाल का बहुत ही सीधा-सीधा कार्यान्वयन।

F=gmp::fibnum;          # Alias Fibonacci function to F
i=0;                    # intitalise counter
d=n=scan();             # get n assign to d as well
while(n)               # loop while n
  if(grepl(F(d),F(i<-i+1)))  # use grepl to determine if Fib of input is in Fib# and increment i
     n=n-1;             # decrement n
F(i)                  # output result

कुछ परीक्षण

> F=gmp::fibnum;i=0;d=n=scan();while(n)if(grepl(F(d),F(i<-i+1)))n=n-1;F(i)
1: 2
2: 
Read 1 item
Big Integer ('bigz') :
[1] 1
> F=gmp::fibnum;i=0;d=n=scan();while(n)if(grepl(F(d),F(i<-i+1)))n=n-1;F(i)
1: 3
2: 
Read 1 item
Big Integer ('bigz') :
[1] 233
> F=gmp::fibnum;i=0;d=n=scan();while(n)if(grepl(F(d),F(i<-i+1)))n=n-1;F(i)
1: 10
2: 
Read 1 item
Big Integer ('bigz') :
[1] 4660046610375530309
> F=gmp::fibnum;i=0;d=n=scan();while(n)if(grepl(F(d),F(i<-i+1)))n=n-1;F(i)
1: 15
2: 
Read 1 item
Big Integer ('bigz') :
[1] 1387277127804783827114186103186246392258450358171783690079918032136025225954602593712568353

0

क्लोजर, 99 बाइट्स

(def s(lazy-cat[0 1](map +(rest s)s)))#(nth(filter(fn[i](.contains(str i)(str(nth s %))))s)(dec %))

एक मूल समाधान, फाइबोनैचि संख्याओं के अनंत अनुक्रम का उपयोग करता है s


0

सी #, 35 बाइट्स

int u=1,b=1;for(;b<n;){b+=u;u=b-u;}

कोशिश करो

int n=int.Parse(t2.Text);int u=1,b=1;for(;b<n;){b+=u;u=b-u;t.Text+=b.ToString()+" ";}if(b==n){t.Text+="true";}

1
प्रोग्रामिंग पहेली और कोड-गोल्फ पर आपका स्वागत है। उत्तर के लिए या तो एक पूर्ण कार्यक्रम या एक फ़ंक्शन होना चाहिए, जबकि आपने केवल एक स्निपेट प्रदान किया था। विशेष रूप से, आप यह मान रहे हैं कि इनपुट अंदर है nऔर आप आउटपुट को b(मुझे लगता है) डालें । आप लिख सकते हैं कि nतर्कों और रिटर्न के रूप में ले लो b... इसके अलावा, मुझे पूरा यकीन है कि आप गणना नहीं कर रहे हैं कि चुनौतियां क्या पूछती हैं। वास्तव में, मुझे पता नहीं है कि आप क्या कंप्यूटिंग कर रहे हैं। क्या आप कृपया कुछ कोड के साथ उपयोग प्रदान कर सकते हैं जिन्हें हम आपके समाधान को सत्यापित करने के लिए चला सकते हैं? (आपका "इसे आज़माएं" जैसा नहीं चलाया जा सकता है ..)
दादा

0

न्यूस्टैक , 14 बाइट्स

N∞ ḟᵢfi 'fif Ṗf⁻

विभाजन:

N∞              Add all natural numbers to the stack
   ḟᵢ           Define new function will value of input
     fi          Get the n'th Fibonacci number for ever element n
       'fif      Remove all elements that don't contain the (input)'th Fibonacci number 
           Ṗf⁻  Print the (input-1)'th element

अंग्रेजी में: (3 इनपुट के उदाहरण के साथ)

N∞: प्राकृतिक संख्याओं की एक सूची बनाओ [1,2,3,4,5,6...]

ḟᵢ: चर में इनपुट स्टोर करें f [1,2,3,4,5,6...]

: सूची को फाइबोनैचि संख्या में परिवर्तित करें [1,1,2,3,5,8...]

'fif: वे सभी तत्व रखें जिनमें fवें फाइबोनैचि संख्या होती है[2,21,233...]

Ṗf⁻: f-1वें तत्व को मुद्रित करें (0-आधारित अनुक्रमण के कारण -1)233


GitHub में केवल एक रीडमी और एक ट्यूटोरियल है। एक कार्यान्वयन को संदर्भित किया गया है, लेकिन यह लिंक नहीं है। हालाँकि PPCG अब भाषाओं को चुनौती से अलग अनुमति देता है, मेरा मानना ​​है कि हमें अभी भी एक युवा रूप से उपलब्ध कार्यान्वयन की आवश्यकता है।
अर्जन जोहानसन

@ ThanksrrrJohansen, मुझे याद दिलाने के लिए अहा धन्यवाद। मैं अपलोड करना भूल गया! यह एक मिनट में हो जाएगा।
ग्रेविटन

आपका कार्यान्वयन UTF-8 का उपयोग करने के लिए लगता है, उस स्थिति में जो वास्तव में 28 बाइट्स है (हास्केल सेटिंग को ध्यान में न रखें, मैं केवल बाइट्स गिनने के लिए TIO का उपयोग कर रहा हूं)। इस तरह से जेली आदि भाषाओं के अपने कोड पृष्ठ हैं।
अर्जन जोहान्सन

@ InrjanJohansen Touché, मैं अपनी खुद की एन्कोडिंग के लिए एक तालिका वितरित करने के काम में हूँ जैसा कि हम बोलते हैं।
ग्रेविटन

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