Codegolf - В Числах Фибоначчи

  • Автор темы Makara2004
  • Обновлено
  • 22, Oct 2024
  • #1

Вызов

Учитывая целочисленный ввод, верните первое число Фибоначчи, которое содержит входные данные внутри себя, вместе с индексом этого числа Фибоначчи (индексы, начинающиеся с 0 или 1 - на ваше усмотрение, но укажите, какие именно в своем ответе). Например, если ввести число 12, программа вернет

 
 
 
 
 
 
 
 12: 144
 
as 12 is found within the number (121393) и находится на 26-м месте чисел Фибоначчи.

Примеры

Учитывая ввод:

144

Ваша программа должна вывести:

0: 0

Вход:

0

Выход:

54: 86267571272

Вход:

72

Выход:

33: 3524578

Вход:

45

Выход:

26: 121393

Подсчет очков

Это , поэтому побеждает самый короткий ответ на каждом языке.

#код-гольф #код-гольф #фибоначчи

Makara2004


Рег
29 Dec, 2006

Тем
66

Постов
178

Баллов
538
  • 26, Oct 2024
  • #3

Перл 6, 30 байт

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

Попробуйте онлайн!

@f=(0,1);push@f,$f[-1]+$f[-2]while($f[-2]!~/$_/);$_=--$#f." $f[-1]" is a function that returns the first element of a sequence that passes a test, and it conveniently takes a $b[1] = 1; наречие, которое указывает ему возвращать как ключ (индекс), так и соответствующее значение.

 

Degtianniko99


Рег
04 Apr, 2020

Тем
83

Постов
211

Баллов
656
  • 26, Oct 2024
  • #4

Пакетный, 104 байта

$b[0] = 0;

Работает для <?php $x=fgets(STDIN);$b=[0,1];if($x<1)$b=[0];for(;($c=count($b)-1)&&strpos($b[$c],$x)===false;){$b[]=$b[$c]+$b[$c-1];}die($c.': '.$b[$c]);?> due to the limited range of Batch's integer arithmetic. Explanation: Batch doesn't have a built-in match test, but it does have an operator that can replace literal strings with other literal strings, so for example _Ŭø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 верно, если _ŬøU}a@[XMgX] is not empty but does not contain !==false . Использование false < -1 is then a trick to substitute false < 0 (вход) в оператор замены, однако false == 0 doesn't work on control flow statements so an intermediate temporary assignment is necessary.

 

Rick217


Рег
21 May, 2014

Тем
57

Постов
164

Баллов
449
  • 26, Oct 2024
  • #6

Javascript ES6, 68 символов

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

Тест:

import Data.List f=0:scanl(+)1f g n=filter(isInfixOf(show n).show.snd)(zip[0..]f)!!0 ||answer||

Питон 3, 76 байт

n=>{int a=0,b=1,c,d=0;for(;b.ToString().IndexOf(n.ToString())<0;c=a,a=b,b+=c,d++);return d+": "+b;} ||answer||

Эмодзикод, 133 байта

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

Попробуйте онлайн!

 

Stasice


Рег
04 Dec, 2006

Тем
77

Постов
193

Баллов
578
  • 26, Oct 2024
  • #7

Диалог APL, 39 байт

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

Использование хвостовой рекурсии. Не пытайтесь 72, это сломает вашу машину, потому что она пересчитывает Фибоначчи при каждом вызове.

Попробуйте онлайн!

 

Luba.bojko


Рег
14 Apr, 2011

Тем
55

Постов
183

Баллов
468
  • 26, Oct 2024
  • #9

На самом деле, 13 байт

b

Попробуйте онлайн!

Объяснение:

a ||answer||

Р, 65 байт

1001

Стандартная рекурсия для генерации фибнумов, но вместо завершения на основе f(0) , terminates when n соответствует регулярному выражению 1 . This actually works surprisingly well. I assumed that using regex with numerics would require a lot of hassle converting them to strings, but that doesn't seem to be necessary :)

Это также должно пропустить рекурсию на 1 шаг, проверив a instead of b а затем вычитание x from b . Это чтобы убедиться n works properly.

Это не работает для большинства значений, когда входные данные превышают f=function(x,n=1,a=1,b=0)`if`(grepl(x,b),c(b,n-1),f(x,n+1,a+b,a)) , because of maxint. If we replace ╗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⌠F$╜@c⌡╓i;F for bigints, this works for higher inputs (current testing is at (T=ToString;If[(h=#)==0,"0:0",a=#&@@Select[k=T/@(Array[Fibonacci,9#]),StringContainsQ[#,T@h]&];Min@Position[k,a]":"a])& )

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

JavaScript ES6, 79 78 75 байт

-1 байт по Степ Хен

-3 байта Нил

????????????a 0???b 1???i 0???☁️э?????a 10??????10??????b➕a b???a➖b a???i➕1i?????????i 10??????a 10??? ||answer||

С# (.NET Core), 99 байт

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)

Попробуйте онлайн!

Принимает входные данные как целое число и возвращает строку с выходными данными.

 

Favstov.roma


Рег
23 Oct, 2019

Тем
81

Постов
182

Баллов
607
  • 26, Oct 2024
  • #11

PHP, 80 байт

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

Сценарий довольно прост: он просто сохраняет текущий и следующий члены последовательности в $a и $b. Чтобы учесть 0-й член из 0, $a и $b изначально присваиваются значения для -1-го члена (1) и 0-го члена (0) соответственно.

Оба значения пересчитываются в одном выражении, которое представляет собой два присваивания в одном; эффективно:

³DẇÆḞ¬ 0‘Ç¿µ,ÆḞ

Если входное значение соответствует началу термина, функция strpos() вернет 0 (что является ложным и даст ложноотрицательный результат), но в чудесном мире PHP, хотя call is true and %1 ложно, call is true! And so, using this comparison saves five bytes compared to l .

 

Bucew


Рег
15 Jan, 2009

Тем
66

Постов
210

Баллов
570
  • 26, Oct 2024
  • #12

Япт, 17 14 байт

Сэкономлено 3 байта благодаря @JustinMariner.

%s%

Попробуйте онлайн!

Объяснение

if "%s:l=%"=="%s%" ||answer||

PHP, 163 141 байт

n=0..45

Попробуйте онлайн!

Использование @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% and :kv для начала последовательности Фибо

 

Rslayout


Рег
09 Dec, 2020

Тем
75

Постов
203

Баллов
608
  • 26, Oct 2024
  • #14

PHP, 93 байта

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

Простой цикл по последовательности Фибоначчи. Проверка нашего входного номера выполняется в f=lambda n,i=0,a=0,b=1:`n`in`a`and(i,a)or f(n,i+1,b,a+b) ; the extra space is because 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. вернет false-y, если «игла» находится в начале строки. Мы завершаем работу, если входные данные найдены, и выводим требуемую строку.

Попробуйте онлайн!

 

Domovoi4444


Рег
07 May, 2020

Тем
81

Постов
204

Баллов
619
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно