피보나치 수열


13

이 코드 골프의 경우, fib onacci 시퀀스, 즉 정상적인 피보나치 시퀀스를 입력하지만 하나의 숫자는 올바르지 않습니다. 참조, 순서는 fibbing입니다 ! 알 겠어요?: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 입력은 공백으로 구분됩니다.
손잡이

임무는 첫 번째 숫자 만 찾는 것입니다. 맞습니까? 예를 들어, 첫 번째 순서에서 오른쪽에서 시작한 경우 8에는 같지 않기 때문에 잘못된 것으로 생각할 수 있습니다.9+5
Luis Mendo

@LuisMendo 항상 하나의 숫자 만있을 것입니다.
Doorknob

1
@LuisMendo 자, 다음과 같이 말하겠습니다 : 순서를 올바르게하는 단일 숫자를 변경하는 방법은 항상 정확히 하나 있습니다.
Doorknob

답변:





5

APL (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: k오른쪽으로 1만큼 회전 한 다음 첫 번째 요소 (예 : 1 1 2 3-> 2 3 1) 를 삭제하십시오.
  • :이 목록이 다른 곳을 찾으십시오
  • 1⍳⍨: 1이 목록 에서 첫 번째 위치를 찾습니다 (잘못된 번호의 위치)
  • 1+: 삭제 된 요소를 보완하기 위해 1을 더함


4

dc, 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)

3

어크 : 55

{for(i=3;i<=NF;i++)if($i+$(i-1)!=$(i+1)){print i;exit}}

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$*다음도 안전하게 제거 할 수 있습니다.
britishtea

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 (In Integer)에 있다고 가정합니다.

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

1

JS, 52B

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


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

이것이 허용되는지 확실하지 않습니다. 시퀀스는 한 번에 한 단어 씩 입력되며 전체 시퀀스를 입력 한 후가 아니라 오류시 프로그램이 중단됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.