ภายในหมายเลขฟีโบนักชี


20

ความท้าทาย

ได้รับการป้อนจำนวนเต็มส่งกลับหมายเลข Fibonacci แรกที่ประกอบด้วยการป้อนข้อมูลภายในตัวเองพร้อมกับดัชนีของหมายเลข Fibonacci นั้น (ดัชนีเริ่มต้นที่ 0 หรือ 1 - ขึ้นอยู่กับคุณ แต่โปรดระบุว่าในคำตอบของคุณ) ตัวอย่างเช่นหากกำหนดอินพุต 12 โปรแกรมจะส่งคืน26: 121393เป็น 12 พบภายในหมายเลข ( 12 1393) และอยู่ที่ดัชนี 26 ของหมายเลขฟีโบนักชี

ตัวอย่าง

รับอินพุต:

45

โปรแกรมของคุณควรส่งออก:

33: 3524578

การป้อนข้อมูล:

72

เอาท์พุท:

54: 86267571272

การป้อนข้อมูล:

0

เอาท์พุท:

0: 0

การป้อนข้อมูล:

144

เอาท์พุท:

12: 144

เกณฑ์การให้คะแนน

นี่คือดังนั้นคำตอบที่สั้นที่สุดในแต่ละภาษาจะเป็นผู้ชนะ


เราสามารถเลือกให้มีดัชนี 1 ดัชนีแทนได้หรือไม่?
Mr. Xcoder

1
ไม่ซ้ำกัน แต่สวยใกล้นี้ความท้าทาย
ลินน์

1
อ่านเพิ่มเติมเกี่ยวกับคณิตศาสตร์เกี่ยวกับว่าลำดับ Fibonacci เป็นเรื่องปกติหรือไม่ (คำถามนี้ถือว่าเป็น)
AdmBorkBork

1
เราต้องใช้โคลอนเป็นตัวคั่นหรือไม่? เราสามารถส่งออกอาร์เรย์ / รายการได้หรือไม่?
Shaggy

คำตอบ:


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.

คุณใช้เคล็ดลับเดียวกับของฉัน :)
Erik the Outgolfer

@EriktheOutgolfer เป็นของคุณหรือไม่
Dennis

ไม่ได้โพสต์ แต่โดยทั่วไปฉันไม่ได้ใช้Dทั้ง ...
Erik the Outgolfer


4

Perl 6 , 30 ไบต์

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

ลองออนไลน์!

firstเป็นฟังก์ชั่นที่คืนค่าองค์ประกอบแรกของลำดับที่ผ่านการทดสอบและใช้:kvคำวิเศษณ์ที่บอกให้คืนค่าทั้งคีย์ (ดัชนี) และค่าที่ตรงกัน


สมมติว่าคุณสามารถกลับมาเป็นคู่วัตถุคุณสามารถใช้คำวิเศษณ์แทน: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เนื่องจากช่วงที่ จำกัด ของเลขจำนวนเต็มของแบทช์ คำอธิบาย: แบทช์ไม่มีการทดสอบการจับคู่ในตัว แต่มีโอเปอเรเตอร์ที่สามารถแทนที่สตริงตัวอักษรด้วยสตริงตัวอักษรอื่น ๆ ดังนั้นตัวอย่างif "%s:l=%"=="%s%"จะเป็นจริงถ้า%s%ไม่ว่าง lแต่ไม่ได้มี การใช้callเป็นเคล็ดลับในการแทนที่%1(อินพุต) ในโอเปอเรเตอร์การเปลี่ยนอย่างไรก็ตามcallไม่สามารถทำงานกับคำสั่งการควบคุมการไหลดังนั้นการมอบหมายชั่วคราวระดับกลางจึงเป็นสิ่งจำเป็น






1

Dyalog APL ขนาด 39 ไบต์

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

ใช้การเรียกซ้ำแบบหาง อย่าพยายาม 72 มันจะทำลายเครื่องของคุณเพราะฟีโบนัชชีคำนวณใหม่ทุกครั้งที่โทร

ลองออนไลน์!




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

การเรียกซ้ำแบบมาตรฐานเพื่อสร้าง Fibnums แต่แทนที่จะยกเลิกโดยยึดตามnจะสิ้นสุดลงเมื่อbตรงกับ xregex มันใช้งานได้ดีอย่างน่าประหลาดใจจริงๆ ฉันคิดว่าการใช้ regex กับตัวเลขจะต้องยุ่งยากมากในการแปลงเป็นสตริง แต่ดูเหมือนจะไม่จำเป็น :)

นอกจากนี้ยังมีการทำซ้ำเกินกว่าการเรียกซ้ำโดย 1 ขั้นตอนโดยการตรวจสอบbแทนaและจากนั้นย่อ1มาจากnจากนี่คือเพื่อให้แน่ใจว่าf(0)ทำงานอย่างถูกต้อง

สิ่งนี้ล้มเหลวสำหรับค่าส่วนใหญ่เมื่ออินพุตเกิน1001เนื่องจาก maxint หากเราแทนที่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

JavaScript ES6, 79 78 75 ไบต์

-1 ไบต์โดยStep Hen

-3 ไบต์โดยNeil

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')
สตีเฟ่น

1
String.prototype.indexOfแปลงพารามิเตอร์เป็นสตริงโดยอัตโนมัติโดยไม่จำเป็นต้องทำอย่างชัดเจน นอกจากนี้คุณดูเหมือนจะคัดลอกคำผิดของ @ StepHen (คุณมี(มากกว่า)s)
Neil

@ Neil woops bad ของฉัน
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ก็เป็นจริง! และอื่น ๆ !==falseโดยใช้การเปรียบเทียบนี้จะช่วยประหยัดห้าไบต์เมื่อเทียบกับ


1

Japtap , 17 14 ไบต์

บันทึกแล้ว 3 ไบต์ขอบคุณ @JustinMariner

_Ŭø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 , 163 141 ไบต์

<?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]);?>

ลองออนไลน์!

ใช้$b[0] = 0;และ$b[1] = 1;สำหรับการเริ่มต้นของลำดับตอแหล



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จะกลับเท็จ - y หากพบ 'เข็ม' ที่จุดเริ่มต้นของสตริง เราสิ้นสุดหากพบอินพุตและสะท้อนสตริงที่ต้องการ

ลองออนไลน์!


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.