फिबोनाची अनुक्रम


13

इस कोड को गोल्फ के लिए, आप एक के एक इनपुट प्राप्त होगा मिथ्या onacci अनुक्रम, यह है कि, एक सामान्य फाइबोनैचि अनुक्रम लेकिन एक नंबर सही नहीं है। देखें, अनुक्रम रेशेदार है ! उसे ले लो?:D

आपका काम यह पता लगाना है कि कौन सी संख्या गलत है, और उस संख्या के सूचकांक (0-आधारित) को प्रिंट करें।

उदाहरण के लिए:

Input : 1 1 2 9 5 8 13
Output: 3

Input : 8 13 21 34 55 80
Output: 5

Input : 2 3 5 5 13 21
Output: 3

विशेष विवरण:

  • अनुक्रम किसी भी संख्या में शुरू हो सकता है।
  • इनपुट के पहले दो नंबर हमेशा सही रहेंगे ।
  • सबसे छोटा कोड (वर्ण गणना) जीतता है।

2
क्या इनपुट को स्पेस-सीमांकित किया जाना है या कॉमा का भी उपयोग किया जा सकता है?
अस्थिरता

@Volatility Input अंतरिक्ष-सीमांकित है।
दरवाज़े

काम केवल पहली ऐसी संख्या को खोजना है , है ना? उदाहरण के लिए, यदि आप पहले क्रम में दाईं ओर से शुरू करते हैं तो आप सोच सकते हैं कि 8यह गलत है क्योंकि यह बराबर नहीं है9+5
लुइस मेंडो

@LuisMendo हमेशा ऐसी ही एक संख्या होगी।
दरवाज़े

1
@LuisMendo ठीक है, मुझे पुनः बताएं कि: एकल संख्या को बदलने का हमेशा एक ही तरीका होगा जो अनुक्रम को सही बनाता है।
दरवाज़े

जवाबों:


15

गोल्फस्क्रिप्ट (18 वर्ण)

~]:^,,{^>3<~-+}?2+

इस कमी को रखने की कुंजी है ? (लगता है)।


15
+1 फिबोनाची के चित्र के लिए~]:^,
gnibbler



5

एपीएल (19)

1+1⍳⍨(1↓1⌽k)≠2+/k←⎕

स्पष्टीकरण:

  • k←⎕: में उपयोगकर्ता इनपुट की दुकान k
  • 2+/k: तत्वों की प्रत्येक जोड़ी में योग k(अर्थात 1 1 2 3-> 1+1 1+2 2+3-> 2 3 5)
  • 1↓1⌽k: k1 से दाईं ओर घूमें और फिर पहला तत्व छोड़ें (यानी 1 1 2 3-> 2 3 1)
  • : वह स्थान ढूंढें जहाँ ये सूचियाँ नहीं के बराबर हैं
  • 1⍳⍨: 1इस सूची में पहले स्थान का पता लगाएं (गलत संख्या का स्थान)
  • 1+: गिराए गए तत्व की भरपाई के लिए 1 जोड़ें


4

डीसी, ३६ ३२

?zszsasb[lalbdsa+dsb=x]dsxxlzz-p

dc एक रिवर्स-पोलिश कैलकुलेटर है, इसलिए स्पष्ट रूप से आपको रिवर्स ऑर्डर में संख्याओं को इनपुट करना होगा;)

$ dc fib.dc <<< "999 13 8 5 3 2 1 1"
7
$ dc fib.dc <<< "999 1 1"
2

3

जावास्क्रिप्ट ( 69 68 61 60 55)

for(s=prompt(i=2).split(' ');s[i]-s[i-1]==s[i-2];i++);i

(60)

s=prompt(i=2).split(' ');for(;s[i]==+s[i-1]+ +s[i++-2];);--i


(61)

s=prompt(i=1).split(' ');for(k=+s[1];k+=+s[i-1],k==s[++i];);i

(68)

s=prompt(i=1).split(' ');for(k=+s[1];k+=+s[i-1],k==s[++i];);alert(i)

(69)

s=prompt(i=1).split(' ');k=+s[1];for(;k+=+s[i-1],k==s[++i];);alert(i)


2

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

for(n=prompt().split(' '),i=n.length;i---2;)if(n[i-2]- -n[i-1]!=n[i])i

2

रूबी, 66

रूबी कार्यक्रम में (कुछ हद तक) जटिल मेरा पहला प्रयास:

p gets.split.map(&:to_i).each_cons(3).find_index{|a,b,c|a+b!=c}+2

आप काफी कुछ पात्रों को बचाने के लिए यदि आप जगह ले सकता है gets.splitके साथ $*( ARGV) आदेश पंक्ति तर्क के रूप में के बजाय मानक इनपुट धारा पर इनपुट लेने के लिए। के बीच का स्थान pऔर $*फिर सुरक्षित रूप से हटाया भी जा सकता है।
ब्रिटिश

1

पायथन, 74

a=map(int,raw_input().split())
i=2
while a[i-2]+a[i-1]==a[i]:i+=1
print i

मेरे पास यह समाधान पहले था, लेकिन डॉर्कनब ने मुझे पोस्ट करने से पहले इनपुट के प्रारूप के बारे में सवाल का सही उत्तर दिया:

पायथन, 66

a,b=input(),input()
i=2
while input()==a+b:a,b=b,a+b;i+=1
print i

मान लेता है कि नयालाइन अलग इनपुट है।


1

VB.net (77)

मान लें कि संख्या पहले से ही एक IEnumerable (पूर्णांक) में हैं।

 Dim p = xs.Skip(2).TakeWhile(Function(c, i) c = xs.Skip(i).Take(2).Sum).Count + 2


1

मतलाब / ऑक्टेव, 39 बाइट्स

एक बाइट को बचाने के लिए स्टेवी ग्रिफिन को धन्यवाद ! (का -प्रसार ~=)

@(x)find(diff(x(2:end))-x(1:end-2),1)+1

यह एक अनाम फ़ंक्शन है जो एक सरणी इनपुट करता है और एक नंबर आउटपुट करता है।

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


1

कोटलिन , 77 बाइट्स

{val r=it.split(' ').map{it.toInt()}
var i=2
while(r[i]==r[i-1]+r[i-2])i++
i}

सजा हुआ

{
    val r = it.split(' ').map { it.toInt() }
    var i=2
    while(r[i] == r[i-1] + r[i-2]) i++
    i
}

परीक्षा

var f:(String)->Int =
{val r=it.split(' ').map{it.toInt()}
var i=2
while(r[i]==r[i-1]+r[i-2])i++
i}

data class Test(val input: String, val output: Int)

val TESTS = listOf(
        Test("1 1 2 9 5 8 13", 3),
        Test("8 13 21 34 55 80", 5),
        Test("2 3 5 5 13 21", 3)
)
fun main(args: Array<String>) {
    val fails = TESTS
        .asSequence()
        .map { it to f(it.input) }
        .filter { (test, res) -> test.output != res }
        .toList()

    if (fails.isEmpty()) {
        println("Test Passed")
    } else {
        fails.forEach{ println(it)}
    }
}

0

पायथन (90)

a=map(int,raw_input().split())
print min(i for i in range(2,len(a))if a[i-2]+a[i-1]!=a[i])

0

गणितज्ञ 59

क्योंकि अंतरिक्ष-सीमांकित इनपुट की आवश्यकता है, StringSplitनियोजित करने की आवश्यकता है। निम्नलिखित मानता है कि इनपुट एक स्ट्रिंग के रूप में है i

s = StringSplit@i;
p = 3; While[s[[p - 1]] + s[[p - 2]] == s[[p]], p++]; p - 1



0

QBIC , 31 बाइट्स

_!_!{_!~a+b=c|a=b┘b=c┘s=s+1\_Xs

व्याख्या

_!_!           Ask the user for two umbers, assign them to 'a' and 'b'
{              DO
 _!            Ask for a third number (this will be assigned to 'c' on every iteration)
 ~a+b=c        IF the previous two terms add up to the third
 |a=b          THEN shift b into a, 
   ┘b=c            and c into b
   ┘s=s+1          increment s (starts as 3 in QBIC)
 \_Xs          ELSE quit, printing the step counter

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

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