피보나치 수 내


20

도전

정수 입력이 주어지면, 피보나치 수의 색인과 함께 그 안에 입력을 포함하는 첫 번째 피보나치 수를 반환하십시오 (0 또는 1에서 시작하는 색인, 그러나 당신의 대답에서 언급하십시오). 예를 들어, 12의 입력이 주어진 경우, 프로그램은 26: 12139312가 숫자 ( 12 1393) 내에 있고 피보나치 수의 색인 26에있는 대로 리턴 합니다.

주어진 입력 :

45

프로그램은 다음을 출력해야합니다 :

33: 3524578

입력:

72

산출:

54: 86267571272

입력:

0

산출:

0: 0

입력:

144

산출:

12: 144

채점

이것은 이므로 각 언어에서 가장 짧은 답변이 이깁니다.


대신 1- 인덱싱을 선택할 수 있습니까?
Mr. Xcoder

1
복제본은 아니지만 과제에 매우 가깝습니다 .
Lynn

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.

당신은 내 것과 같은 트릭을 사용했습니다. :)
Outgolfer Erik

@EriktheOutgolfer 당신으로?
Dennis

그것을 게시하지 않았지만 일반적으로 나는 D어느 쪽도 사용하지 않았다 ...
Outgolfer Erik


4

펄 6 , 30 바이트

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

온라인으로 사용해보십시오!

first는 테스트를 통과 한 시퀀스의 첫 번째 요소를 반환하는 함수이며 :kv키 (인덱스)와 일치하는 값을 모두 반환하도록 지시 하는 부사를 편리하게 사용 합니다.


Pair 객체를 반환 할 수 있다고 가정하면 :p대신에 부사를 사용할 수 있습니다 :kv.
브래드 길버트 b2gills

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배치의 정수 산술의 제한된 범위로 인해 작동합니다 . 설명 : Batch에는 내장 일치 테스트가 없지만 리터럴 문자열을 다른 리터럴 문자열로 바꿀 수있는 연산자가 있으므로 비어 있지 않지만 포함하지 않은 if "%s:l=%"=="%s%"경우 true 입니다. 그런 다음 사용은 대체 연산자로 입력 을 대체하는 트릭 이지만 제어 흐름 명령문에서는 작동하지 않으므로 중간 임시 할당이 필요합니다.%s%lcall%1call



2

자바 스크립트 ES6, 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

Dyalog APL, 39 바이트

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

꼬리 재귀 사용. 72 번 시도하지 마십시오. 전화를 거칠 때마다 피보나치가 재 계산되므로 기기가 고장날 수 있습니다.

온라인으로 사용해보십시오!



1

실제로 13 바이트

╗1⌠F$╜@c⌡╓i;F

온라인으로 사용해보십시오!

설명:

╗1⌠F$╜@c⌡╓i;F
╗              save input in register 0
 1⌠F$╜@c⌡╓     smallest non-negative integer n where the following function returns truthy:
   F$            nth Fibonacci number, stringified
     ╜@c         count occurrences of input
          i;F  flatten the list, duplicate the index, and push the Fibonacci number at that index

1

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

Fibnum을 생성하기위한 표준 재귀이지만에 기반으로 종료하는 대신 정규식과 일치하면 n종료됩니다 . 이것은 실제로 놀랍게 잘 작동합니다. 정규식을 숫자와 함께 사용하면 문자열로 변환하는 데 많은 번거 로움이 필요하지만 필요하지 않은 것 같습니다.bx

이것은 또한 검사에 의해 1 단계로 순환 오버 슈트하는 b대신 a다음 substracting 1에서 n. 이것은 f(0)제대로 작동 하는지 확인하는 것입니다.

1001maxint 때문에 input 이을 초과하면 대부분의 값에 실패합니다 . 우리가 bigint를 대체 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

자바 스크립트 ES6, 79 78 75 바이트

단계별 Hen에 의한 -1 바이트

Neil의 -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')
Stephen

1
String.prototype.indexOf매개 변수를 문자열로 자동 변환하므로 명시 적으로 수행 할 필요가 없습니다. 또한 @StepHen의 오타를 복사 한 것으로 보입니다 ( (s보다 )s 이상 ).
Neil

@ 닐은 내 나쁜 멍청이
Stephen



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

입력 값이 용어의 시작과 일치하면 strpos () 함수는 0을 반환하지만 (거짓은 거짓 음수를 나타냄) Wonderphul World of PHP에서는 false == 0참이고 false < 0거짓이지만 false < -1참입니다! 따라서이 비교를 사용하면에 비해 5 바이트가 절약됩니다 !==false.


1

apt , 17 14 바이트

@JustinMariner 덕분에 3 바이트 절약

_Ŭø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
Justin Mariner

@JustinMariner 저것은 ... 천재입니다 :-)
ETHproductions



0

PHP , 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문자열의 시작 부분에 '바늘'이 있으면 false-y를 반환 하기 때문 입니다. 입력이 발견되면 종료하고 필요한 문자열을 출력합니다.

온라인으로 사용해보십시오!


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