FIBonacci ক্রম


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
ইনপুটটি কি স্পেস-সীমাবদ্ধ হতে হবে বা কমাগুলিও ব্যবহার করা যেতে পারে?
অস্থিরতা

@ ভোলাটিলিটি ইনপুট স্থান-সীমাবদ্ধ।
ডোরকনবব

কাজটি এই জাতীয় প্রথম সংখ্যাটি খুঁজে পাওয়া উচিত, তাই না? উদাহরণস্বরূপ, আপনি যদি প্রথম অনুক্রমের ডান থেকে শুরু করে থাকেন তবে আপনি 8এটি ভুল বলে মনে করতে পারেন কারণ এটি সমান নয়9+5
লুইস মেন্ডো

@ লুইসমেডো সর্বদা এই জাতীয় একটি সংখ্যা থাকবে।
ডুরকনব

1
@ লুইস মেন্ডো ঠিক আছে, আমাকে এই উচ্চারণ করুন: সর্বদা একক সংখ্যা পরিবর্তন করার ঠিক একটি উপায় থাকবে যার ফলে ক্রমটি সঠিক হতে পারে।
ডুরকনব

উত্তর:


15

গল্ফস্ক্রিপ্ট (18 টি অক্ষর)

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

এই সংক্ষিপ্ত রাখার মূল চাবিকাঠিটি কী ? (অনুসন্ধান).


15
ফিবোনাচ্চির প্রতিকৃতির জন্য +1~]:^,
জিনিবলারের



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

ডিসি, 36 32

?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

রুবি, 66

জটিল কিছু রুবি প্রোগ্রামে আমার প্রথম প্রচেষ্টা:

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

আপনি যদি স্ট্যান্ডার্ড ইনপুট স্ট্রিমের পরিবর্তে কমান্ড লাইন আর্গুমেন্ট হিসাবে ইনপুট নিতে ( ) gets.splitদিয়ে প্রতিস্থাপন করেন তবে আপনি বেশ কয়েকটি অক্ষর সংরক্ষণ করতে পারেন । এর মধ্যে এবং পরে স্থানটি নিরাপদে সরিয়ে ফেলা যায়। $*ARGVp$*
ব্রিটিশিয়া

1

পাইথন, 74

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

আমি প্রথম এই সমাধান ছিল, কিন্তু Doorknob ইনপুট বিন্যাস সম্পর্কে প্রশ্নের উত্তর সঠিক আগে আমি তা পোস্ট করার সময় ছিল:

পাইথন, 66

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

নিউলাইন পৃথক ইনপুট ধরে নেয়।


1

VB.net (77)

ধরে নিচ্ছি সংখ্যাগুলি ইতিমধ্যে একটি সংখ্যার (পূর্ণসংখ্যার) মধ্যে রয়েছে।

 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

কিউবিআইসি , 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

এটি অনুমোদিত কিনা আমি নিশ্চিত নই; ক্রমটি একবারে একটি শব্দ প্রবেশ করানো হয়, এবং প্রোগ্রামটি পুরো ক্রমটি প্রবেশ করার পরে নয়, ত্রুটিযুক্ত হয়ে যায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.