फाइबोनैचि संख्या के भीतर


20

चुनौती

पूर्णांक इनपुट को देखते हुए, उस फाइबोनैचि संख्या के सूचकांक के साथ ही आपके भीतर इनपुट शामिल करने वाला पहला फाइबोनैचि नंबर लौटाएं (आप 0 या 1 से शुरू होने वाले इंडेक्स - अप करने के लिए, लेकिन कृपया अपने उत्तर में उल्लेख करें)। उदाहरण के लिए, यदि 12 का इनपुट दिया जाता है, तो प्रोग्राम 26: 12139312 के रूप में वापस आ जाएगा ( 12 1393) संख्या के भीतर और यह फाइबोनैचि संख्याओं के सूचकांक 26 पर है।

उदाहरण

इनपुट दिया:

45

आपका कार्यक्रम आउटपुट होना चाहिए:

33: 3524578

इनपुट:

72

आउटपुट:

54: 86267571272

इनपुट:

0

आउटपुट:

0: 0

इनपुट:

144

आउटपुट:

12: 144

स्कोरिंग

यह , इसलिए प्रत्येक भाषा में सबसे कम उत्तर जीतता है।


क्या हम इसके बजाय 1-अनुक्रमण करना चुन सकते हैं?
मिस्टर एक्सकोडर

1
डुप्लिकेट नहीं, बल्कि इस चुनौती के बहुत करीब है ।
लिन

1
फिबोनाची अनुक्रम सामान्य है या नहीं (इसके बारे में यह सवाल है) के बारे में गणित पर थ्रेड ओवर ।
AdmBorkBork

1
क्या हमें एक विभाजक के रूप में एक बृहदान्त्र का उपयोग करना है? क्या हम किसी सरणी / सूची का उत्पादन कर सकते हैं?
झबरा २

जवाबों:


8

जेली , 10 बाइट्स

0ÆḞ©w¥1#;®

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

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

0ÆḞ©w¥1#;®  Main link. Argument: n

0           Set the return value to 0.
       #    Call the second link to the left with arguments k = 0, 1, 2, ... until
      1     one match has been found.
     ¥        Combine the two links to the left into a dyadich chain.
 ÆḞ             Compute the k-th Fibonacci number...
   ©              and copy it to the register.
    w           Yield 1 if n occurs inside the Fibonacci number, 0 otherwise.
         ®  Yield the value stored in the register.
        ;   Concatenate the index and the Fibonacci number.

तुमने मेरी जैसी ही चाल चली। :)
आउटगॉल्फ

@EriktheOutgolfer आपका?
डेनिस

इसे पोस्ट नहीं किया, लेकिन आम तौर पर मैंने Dया तो उपयोग नहीं किया ...
आउटगॉल्फ


4

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

{first :kv,/$_/,(0,1,*+*...*)}

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

firstएक फ़ंक्शन है जो एक अनुक्रम के पहले तत्व को लौटाता है जो एक परीक्षण पास करता है, और यह आसानी से एक :kvक्रिया विशेषण लेता है जो इसे कुंजी (इंडेक्स) और मिलान मूल्य दोनों को वापस करने के लिए कहता है।


मान लें कि आप एक Pair ऑब्जेक्ट वापस कर सकते हैं , तो आप के :pबजाय क्रिया विशेषण का उपयोग कर सकते हैं :kv
ब्रैड गिल्बर्ट

3

बैच, 104 बाइट्स

@set/an=x=0,y=1
:l
@call set t=%%x:%1=%%
@if "%t%"=="%x%" set/an+=1,x+=y,y=x-y&goto l
@echo %n%: %x%

n=0..45बैच की पूर्णांक अंकगणित की सीमित सीमा के कारण काम करता है । स्पष्टीकरण: बैच में एक अंतर्निहित मैच टेस्ट नहीं होता है, लेकिन इसमें एक ऑपरेटर होता है जो शाब्दिक तार को अन्य शाब्दिक तार के साथ बदल सकता है, इसलिए उदाहरण के लिए if "%s:l=%"=="%s%"यह सच %s%है कि खाली नहीं है लेकिन इसमें शामिल नहीं है l। इसके callबाद %1प्रतिस्थापन ऑपरेटर में स्थानापन्न (इनपुट) करने के लिए एक चाल है , हालांकि callनियंत्रण प्रवाह बयानों पर काम नहीं करता है इसलिए एक मध्यवर्ती अस्थायी असाइनमेंट आवश्यक है।



2

जावास्क्रिप्ट ईएस 6, 68 वर्ण

n=>eval('for(q=x=0,y=1;!`${x}`.match(n);++q)[x,y]=[y,x+y];q+": "+x')

परीक्षा:

f=n=>eval('for(q=x=0,y=1;!`${x}`.match(n);++q)[x,y]=[y,x+y];q+": "+x')
console.log([45,72,0,144].map(f).join`
`)


2

पायथन 3, 76 बाइट्स

f=lambda n,l=[1,0]:str(n)in str(l[1])and(len(l)-2,l[1])or f(n,[l[0]+l[1]]+l)


1

दिल्लोग एपीएल, 39 बाइट्स

{⍺←0⋄∨/(⍕⍵)⍷⍕x←1∧+∘÷/0,⍺/1:⍺,x⋄(1+⍺)∇⍵}

पूंछ पुनरावृत्ति का उपयोग करना। 72 का प्रयास न करें, यह आपकी मशीन को तोड़ देगा क्योंकि इसके पुनरावर्तक रिट्रेसमेंट हर कॉल पर होते हैं।

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




1

आर, 65 बाइट्स

f=function(x,n=1,a=1,b=0)`if`(grepl(x,b),c(b,n-1),f(x,n+1,a+b,a))

फ़िबनुम्स को उत्पन्न करने के लिए मानक पुनरावृत्ति, लेकिन इसके आधार पर समाप्त होने के बजाय n, bरेगेक्स से मेल खाता है x। यह वास्तव में आश्चर्यजनक रूप से अच्छी तरह से काम करता है। मुझे लगता है कि संख्यात्मक के साथ regex का उपयोग करने के लिए उन्हें तार में परिवर्तित करने में बहुत परेशानी की आवश्यकता होगी, लेकिन यह जरूरी नहीं लगता है :)

यह भी, 1 कदम से प्रत्यावर्तन लक्ष्य के पार चले करने पर जाँच करके है bके बजाय aऔर फिर substracting 1से n। यह सुनिश्चित करने के लिए f(0)ठीक से काम करता है।

यह अधिकतम मानों के लिए विफल रहता है जब इनपुट 1001अधिकता के कारण होता है। यदि हम प्रतिस्थापित करते हैं aऔर bबड़े संकेतों के लिए, यह उच्च आदानों के लिए काम करता है (वर्तमान परीक्षण चालू है x = 11451)

f=function(x,n=1,a=gmp::as.bigz(1),b=gmp::as.bigz(0))`if`(grepl(x,b),c(b,n-1),f(x,n+1,a+b,a))

1

जावास्क्रिप्ट ईएस 6, 79 78 75 बाइट्स

स्टेप हेन द्वारा -1 बाइट

नील द्वारा -3 बाइट्स

i=>eval('d=a=b=1;while(!~(a+"").indexOf(i)){c=b;b=a+b;a=c;‌​d++};d+": "+a')

1
आप बाइट को बचाने के eval()बजाय उपयोग कर सकते हैं { return}, और t=जब से आप पुनरावृत्ति का उपयोग नहीं कर रहे हैं , तब तक आप ड्रॉप कर सकते हैं:i=>eval('d=a=b=1;while(!~(a+"").indexOf(i+""){c=b;b=a+b;a=c;d++};d+": "+a')
स्टीफन

1
String.prototype.indexOfस्वचालित रूप से अपने पैरामीटर को एक स्ट्रिंग में परिवर्तित करता है, इसे स्पष्ट रूप से करने की कोई आवश्यकता नहीं है। इसके अलावा आप @ StepHen का टाइपो (आपके पास (s से अधिक s है )) की नकल करते दिखाई देते हैं ।
नील

@ नील मेरा बुरा मानती है
स्टीफन



1

PHP, 80 बाइट्स

<?php for($a=1,$b=$n=0;strpos($a=-$a+$b=$a+$b,"$argv[1]")<-1;$n++);echo"$n: $a";

स्क्रिप्ट काफी सरल है, बस $ a और $ b में अनुक्रम के वर्तमान और अगले शब्दों को संग्रहीत करना है। 0 के 0 पद के लिए अनुमति देने के लिए, $ a और $ b को शुरू में क्रमशः -1 वें कार्यकाल (1) और 0 वें कार्यकाल (0) के लिए मान दिए गए हैं।

दोनों मूल्य एक ही अभिव्यक्ति में पुनर्गणित होते हैं, जो एक में दो असाइनमेंट हैं; प्रभावी रूप से:

$b = $a + $b; // The next term is the sum of the two previous terms
$a = $b - $a; // The current term is now recalculated from the next and the previous

यदि इनपुट मूल्य शब्द की शुरुआत से मेल खाता है, तो स्ट्रैप्स () फ़ंक्शन 0 वापस आएगा (जो कि गलत है और एक झूठी नकारात्मक देगा), लेकिन PHP के वंडरफुल वर्ल्ड में, हालांकि false == 0यह सच है और false < 0गलत है, false < -1सच है! और इसलिए, इस तुलना का उपयोग करने से इसकी तुलना में पांच बाइट बचती हैं !==false


1

जाप , 17 14 बाइट्स

3 बाइट्स @JustinMariner के लिए धन्यवाद बचा लिया

_ŬøU}a@[XMgX]

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

व्याख्या

_ŬøU}a@[XMgX]      Implicit: U = input integer
      a@            For each integer X in [0, 1, 2, ...]:
        [XMgX]        take [X, Fibonacci(X)].
_    }a             Return the first pair where
 Å                    all but the first item
  ¬                   joined on the empty string (simply returns Fibonacci(X) as a string)
   øU                 contains U.
                    Implicit: output result of last expression

14 बाइट्स _ŬøU}a@[XMgX]:। s1 q अंतिम आइटम प्राप्त करने के लिए उपयोग करना , जो <space>s
जस्टिन मेरिनर

@JustinMariner यह है ... कि प्रतिभाशाली है :-)
ETHproductions



0

पीएचपी , 93 बाइट्स

for($a[0]=$a[1]++;!strpos(" $a[$i]","$argv[1]");$a[$i+2]=$a[$i+1]+$a[$i++]);echo"$i: $a[$i]";

फाइबोनैचि अनुक्रम के माध्यम से सरल लूप। हमारे इनपुट नंबर के लिए जाँच की जाती हैstrpos(" $a[$i]","$argv[1]") ; अतिरिक्त स्थान है क्योंकि strposस्ट्रिंग की शुरुआत में 'सुई' मिलने पर झूठी-वाई वापस आ जाएगी। यदि इनपुट मिलता है तो हम समाप्त करते हैं और आवश्यक स्ट्रिंग को गूंजते हैं।

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


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