ฟีโบนักชีไบนารี


31

ท้าทาย

คุณต้องสร้างโปรแกรมหรือฟังก์ชั่นที่ใช้จำนวนเต็มบวก N คำนวณคำศัพท์ N แรกของลำดับฟีโบนักชีในรูปแบบไบนารีต่อกันเป็นเลขฐานสองเดียวแปลงตัวเลขนั้นกลับเป็นทศนิยมจากนั้นจึงส่งทศนิยมเป็น จำนวนเต็ม.

ตัวอย่างเช่น

1 -> [0] -> 0 to decimal outputs 0
3 -> [0, 1, 1] -> 011 to decimal outputs 3
4 -> [0, 1, 1, 10] -> 01110 to decimal outputs 14

คุณไม่จำเป็นต้องเอาท์พุท->เพียงแค่จำนวน (เช่นถ้าผู้ใช้พิมพ์4เอาท์พุท14) ลูกศรเป็นเพียงเพื่อช่วยอธิบายสิ่งที่โปรแกรมต้องทำ

กรณีทดสอบ

1 -> 0
2 -> 1
3 -> 3
4 -> 14
5 -> 59
6 -> 477
7 -> 7640
8 -> 122253
9 -> 3912117
10 -> 250375522
11 -> 16024033463
12 -> 2051076283353
13 -> 525075528538512
14 -> 134419335305859305
15 -> 68822699676599964537
16 -> 70474444468838363686498
17 -> 72165831136090484414974939
18 -> 147795622166713312081868676669
19 -> 605370868394857726287334099638808
20 -> 4959198153890674493745840944241119317

โปรแกรมจะต้องสามารถส่งออกถึงขีด จำกัด ของภาษาที่ใช้งานอยู่ ไม่อนุญาตให้ใช้ตารางการค้นหาหรือวิธีแก้ไขปัญหาทั่วไป

นี่คือดังนั้นคำตอบที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ!


1
เพิ่มกรณีทดสอบ 0-20 จากtio.run/##DYxBCoQwDAC/... ให้เครดิต @alephalpha สำหรับโปรแกรมนี้
นาธานวู้ด

6
ตามที่ยังไม่ได้กล่าว: ยินดีต้อนรับสู่ PPCG! ความท้าทายแรกที่ดี
Laikoni

@Laikoni ขอบคุณ!
นาธานวู้ด

การ จำกัด ภาษาเฉพาะตรงกับที่ใด อนุญาตให้ใช้ฟังก์ชัน C ที่ส่งคืนเลขจำนวนเต็ม 32 บิตได้หรือไม่ กดint32_t binary_concat_Fib(int n)ไลค์ซึ่งจะ จำกัด ผลลัพธ์ที่ได้ให้เป็น 2 ^ 31-1 นั่นคือคุณได้สมมุติว่าบิตที่ต่อกันพอดีพอดีกับจำนวนเต็ม หรือฟังก์ชั่นควรทำงานได้ถึงจุดที่จำนวนฟีโบนัชชีที่ใหญ่ที่สุดไม่พอดีกับจำนวนเต็มของมันเองดังนั้นการเชื่อมต่อบิตจึงมีความแม่นยำมากขึ้น?
Peter Cordes

1
และ "แปลงเป็นทศนิยม" หรือไม่ต้องชัดเจนเรียกฟังก์ชันสตริงจำนวนเต็ม -> หรือเขียนด้วยตัวเอง? การต่อบิตเป็นจำนวนเต็มเดียวจะให้คุณแทนค่าสุดท้าย ถ้าฉันเข้าใจถูกต้องคำตอบของไพ ธ อนของเดนนิสจะคืนค่าจำนวนเต็มทิ้งไว้กับผู้เรียกเพื่อเปลี่ยนค่านั้นให้เป็นสตริงทศนิยมหรือทำสิ่งใดสิ่งหนึ่งกับมัน ค่าจำนวนเต็มในภาษาคอมพิวเตอร์ที่รองรับตัวดำเนินการ shift-shift เป็นแบบไบนารีไม่ใช่ทศนิยมเว้นแต่ว่าพวกเขาจะถูกเก็บไว้ในสตริง ในภาษาที่ไม่มีตัวเลื่อน / ตัวดำเนินการระดับบิตไม่มีอะไรที่แสดงถึงฐาน
Peter Cordes

คำตอบ:



10

เยลลี่ ,  7  6 ไบต์

ḶÆḞBẎḄ

ลองออนไลน์!

อย่างไร?

ḶÆḞBẎḄ - Link: integer, n
Ḷ      - lowered range -> [0,1,2,3,4,5,...,n]
 ÆḞ    - Fibonacci (vectorises) -> [0,1,1,2,3,5...,F(n)]
   B   - to binary (vectorises) -> [[0],[1],[1],[1,0],[1,1],[1,0,1],...,B(F(n))]
    Ẏ  - tighten -> [0,1,1,1,0,1,1,1,0,1,...,B(F(n))[0],B(F(n))[1],...]
     Ḅ - from binary -> answer

1
ล้อเล่นรอบกับ quicks ใหม่ฉันพบว่าหมายเลขn Fibonacci แรกสามารถพบได้โดยใช้Ṛc’SƲƤซึ่งอาจเป็นประโยชน์สำหรับลำดับที่คล้ายกัน
ไมล์


7

brainfuck , 397 ไบต์

>,[<++++++[->--------<]>>[->++++++++++<]>[-<+>]<<[->+<],]>+[-<<+>>[-[->+<]<<[->+>+<<]<[->+>+<<]>[-<+>]>>[-<<+>>]>]]<<[->+>>>>>+<<<<<<]>[-<+>]>+>>+>>>+<[[->-[<<]>]>[[-]<<<<<<<[->>[-<+>>+<]>[-<+>]<<<]<[->+>>>>>+<<<<<<]>[-<+>]>[-<+>]>[->>[-<+<<+>>>]<[->+<]<]>+>[-]>>+>]<<<<<[[->++>+>++<<<]>[-<+>]<<]>>>]>[-]<<<[-]<<[-]<<->[>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>>>]<+[->++++++[-<++++++++>]<.<<<+]

มันสนุกดี!

รับอินพุต ASCII (เช่น11) ผลลัพธ์จะเป็น ASCII

หมายเหตุ: หากต้องการลองออนไลน์โปรดตรวจสอบให้แน่ใจว่าคุณตั้งขนาดเซลล์เป็น 32 บิต (ทางด้านขวาของหน้าเว็บ) หากคุณไม่ได้ป้อนข้อมูลเบราว์เซอร์ของคุณอาจมีปัญหา

ล่ามไม่สามารถจัดการอินพุต11และสูงกว่าเพราะรองรับได้สูงสุด 32 บิต

ลองใช้กับ copy.sh

คำอธิบาย

>,[<++++++[->--------<]>>[->++++++++++<]>[-<+>]<<[->+<],]>+

รับอินพุตทศนิยมและเพิ่มหนึ่งรายการ (เพื่อลดการทีละรายการ)

[-<<+>>[-[->+<]<<[->+>+<<]<[->+>+<<]>[-<+>]>>[-<<+>>]>]]

สร้างหมายเลขฟีโบนักชีบนเทป

<<[->+>>>>>+<<<<<<]>[-<+>]>+>>+>>>+<

ตั้งค่าสำหรับการต่อข้อมูลไบนารีไบนารีที่เข้ามา


ดังนั้นเซลล์จึงมีค่าเริ่มต้นจากตำแหน่งแรก

1 | 0 | 1 | 1 | 2 | 3 | 5 | ... | f_n | 0 | 1 | 0 | 1 | 0 | f_n | 1 | 0 | 0 | 0...

ดูเซลล์เหล่านี้:

f_n | 0 | 1 | 0 | 1 | 0 | f_n | 1

ฉันจะติดป้ายกำกับนี้:

num | sum | cat | 0 | pow | 0 | num | pow

powจะมีการพบว่าอำนาจสูงสุดของ 2 numว่าเป็นอย่างเคร่งครัดมากกว่า sumคือการต่อกันของตัวเลขจนถึงตอนนี้ catคือพลังของ 2 ที่ฉันต้องคูณด้วยnumเพื่อเชื่อมnumต่อหน้าsum(ดังนั้นฉันจะสามารถเพิ่ม)


[[->-[<<]>]>

วนซ้ำ: ตรวจสอบว่าf_nเข้มงวดน้อยกว่าpowหรือไม่

Truthy:

[[-]<<<<<<<[->>[-<+>>+<]>[-<+>]<<<]<[->+>>>>>+<<<<<<]>[-<+>]>[-<+>]>[->>[-<+<<+>>>]<[->+<]<]>+>[-]>>+>]

ไม่มีศูนย์ขยะ จากนั้นให้เพิ่มnum* ไปcat sumถัดไปโหลดหมายเลขฟีโบนักชีต่อไป (= f_(n-1); หากไม่มีอยู่ให้ออกจากลูป) และตั้งค่าcatเป็นcat*pow *เตรียมความพร้อมสำหรับการวนรอบต่อไป (ศูนย์ขยะเพิ่มเติมเลื่อนขอบเขตหนึ่ง)

Falsey:

<<<<<[[->++>+>++<<<]>[-<+>]<<]

ตั้งpow2 * เรียกคืนpownum

]

ทำซ้ำจนกว่าจะไม่มีจำนวนฟีโบนักชีเหลืออยู่


>[-]<<<[-]<<[-]<<->[>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>>>]<+[->++++++[-<++++++++>]<.<<<+]

ทำความสะอาดขยะ ใช้ตัวเลขแต่ละตัวของตัวเลขผลลัพธ์และส่งออกแต่ละรายการ (เป็น ascii)


7

Husk , 7 ไบต์

ḋṁḋ↑Θİf

ลองออนไลน์!

คำอธิบาย

ḋṁḋ↑Θİf                              4
     İf    The Fibonacci numbers     [1,1,2,3,5,8..]
    Θ      Prepends 0                [0,1,1,2,3,5..]
   ↑     Take n elements from list   [0,1,1,2]
  ḋ        Convert to binary digits  [[0],[1],[1],[1,0]]
 ṁ       Map function then concat    [0,1,1,1,0]
ḋ        Convert from base 2         14

ยินดีต้อนรับสู่ PPCG! :)
DJMcMayhem

5

Japt , 9 ไบต์

ÆMgX ¤Ã¬Í

เรียกใช้

คำอธิบาย:

ÆMgX ¤Ã¬Í
Æ     Ã     | Iterate X through the range [0...Input]
 MgX        |   Xth Fibonacci number
     ¤      |   Binary
       ¬    | Join into a string
        Í   | Convert into a base-2 number

1
Bah! เอาชนะฉันไป!
Shaggy

1
@Shaggy ฉันรู้ว่าสิ่งนี้จะเป็นการแข่งขันกับคุณ: P
Oliver

4

Pyth, 22 ไบต์

JU2VQ=+Js>2J)is.BM<JQ2

ลองที่นี่

คำอธิบาย

JU2VQ=+Js>2J)is.BM<JQ2
JU2                       Set J = [0, 1].
   VQ       )             <Input> times...
     =+Js>2J              ... add the last 2 elements of J and put that in J.
                  <JQ     Take the first <input> elements...
               .BM        ... convert each to binary...
              s           ... concatenate them...
             i       2    ... and convert back to decimal.

3

Perl 6 , 38 ไบต์

{:2([~] (0,1,*+*...*)[^$_]>>.base(2))}

ลองออนไลน์!


1
โปรดทราบว่าสิ่งนี้จะเริ่มช้าลงอย่างเห็นได้ชัดเมื่ออินพุตมากกว่า 200 ใช้เวลาประมาณ 8 วินาทีในการสร้างเอาต์พุตด้วยอินพุต 1000 (20 วินาทีหากคุณรวมการพิมพ์)
Brad Gilbert b2gills



2

J, 36 ไบต์

3 :'#.;<@#:"0]2}.(,{:+_2&{)^:y _1 1'

คำอธิบาย:

3 :'#.;<@#:"0]2}.(,{:+_2&{)^:y _1 1' | Explicit function
                 (,{:+_2&{)^:y _1 1  | Make n fibonacci numbers, with _1 1 leading
              2}.                    | Drop the _1 1
       <@#:"0]                       | Convert each item to binary and box
      ;                              | Unbox and join
    #.                               | Convert back from binary

2

x86, 37 22 21 ไบต์

การเปลี่ยนแปลง

  • -13 โดยใช้ bsrโดยใช้ ขอบคุณ Peter Cordes!
  • -2 โดยzeroing mulลงทะเบียนกับ

  • -1 โดยใช้การวนรอบสักครู่แทนloopและpush/ pop ecx(เครดิต Peter Cordes)

การป้อนข้อมูลในการส่งออกในediedx

.section .text
.globl main
main:
        mov     $5, %edi            # n = 5

start:
        dec     %edi                # Adjust loop count
        xor     %ebx, %ebx          # b = 0
        mul     %ebx                # a = result = 0
        inc     %ebx                # b = 1

fib:
        add     %ebx, %eax          # a += b
        xchg    %eax, %ebx          # swap a,b
        bsr     %eax, %ecx          # c = (bits of a) - 1
        inc     %ecx                # c += 1
        sal     %cl, %edx           # result >>= c
        add     %eax, %edx          # result += a

        dec     %edi                # n--; do while(n)
        jnz     fib 

        ret

objdump:

00000005 <start>:
   5:   4f                      dec    %edi
   6:   31 db                   xor    %ebx,%ebx
   8:   f7 e3                   mul    %ebx
   a:   43                      inc    %ebx

0000000b <fib>:
   b:   01 d8                   add    %ebx,%eax
   d:   93                      xchg   %eax,%ebx
   e:   0f bd c8                bsr    %eax,%ecx
  11:   41                      inc    %ecx
  12:   d3 e2                   shl    %cl,%edx
  14:   01 c2                   add    %eax,%edx
  16:   4f                      dec    %edi
  17:   75 f2                   jne    b <fib>
  19:   c3                      ret    

1
ใช้leaเพื่อเลื่อนและเพิ่มใน fib2 นอกจากนี้การแยกแต่ละบิตทีละครั้งก็ไม่จำเป็น ใช้bsr %eax, %ecxเพื่อค้นหาจำนวนบิตในการแทนค่าแบบไบนารี่และใช้ shift โดย CL / หรือเพื่อผสานเช่นเดียวกับคำตอบ Python ของ Dennis
Peter Cordes

1
คุณต้องการclนับจำนวนกะดังนั้นใช้ตัวนับลูปของคุณใน reg อื่น (เช่น%edi) และใช้dec %edi / jnz(3 ไบต์ในรหัส 32 บิต, 4 ไบต์ใน 64 บิต) ในรหัส 32 บิตที่บันทึกผลรวม 1 ไบต์จากการวาง push / pop ecx อย่าตกหลุมพรางในการใช้loopเมื่อมันทำให้ปัญหาหนักขึ้นไม่ง่ายขึ้น (การประชุมการโทรของคุณได้รับการกำหนดเองแล้วการปิดกั้น%ebxดังนั้นอย่าเรียกใช้ฟังก์ชั่นของคุณmain) คุณอาจกลับมาใช้ EAX ได้ในขณะที่ยังใช้ประโยชน์จาก 1 ไบต์xchgไม่จำเป็นต้องไม่เป็นมาตรฐานหากคุณไม่ต้องการ
Peter Cordes

1
คุณสามารถแทนที่พิเศษของการนับการเปลี่ยนแปลงที่มีการเสริมซ้ายกะเมื่อคุณเพิ่มโดยใช้inc %ecx lea (%eax, %edx, 2), %edxเป็นกลางเป็นไบต์สำหรับ 32- บิตบันทึกหนึ่งสำหรับ x86-64 แต่บันทึกคำสั่ง
Peter Cordes

1
ทุกครั้งที่ฉันใช้loopโค้ดกอล์ฟฉันรู้สึกสกปรก ไม่ค่อยดี แต่ผิดหวังที่ฉันไม่สามารถใช้งานขนาดเล็กเท่ากันที่หลีกเลี่ยงคำสั่งที่ช้า ด้านนอกของสนามกอล์ฟรหัสloopเป็นหนึ่ง peeves ฉันหวังว่ามันจะเร็วสำหรับซีพียูรุ่นใหม่เพราะมันจะดีมากสำหรับลูปที่มีความแม่นยำสูงโดยไม่ต้องมีแผงแฟล็กบางส่วน แต่ก็ไม่ควรพิจารณาว่าเป็นคำสั่งการปรับขนาดที่ไม่ชัดเจนซึ่งทำให้โค้ดของคุณช้า
Peter Cordes

1
อย่างไรก็ตามงานที่ดี นอกจาก push / pop / loop -> dec / jnz ฉันไม่เห็นการประหยัดเลยเพียงแค่การเร่งความเร็ว LEA ที่เป็นกลางในขนาดรหัส ฉันสงสัยเสมอว่ามีกรณีการใช้งานจริงสำหรับxor/ mulเคล็ดลับในการลงทะเบียนศูนย์สาม (คุณเคยต้องการที่ศูนย์จำนวนมาก?) แต่การใช้ที่เป็นส่วนหนึ่งของการสร้าง1ทำให้มันมีเหตุผลมากขึ้น
Peter Cordes


2

Haskell , 89 76 75 ไบต์

f=0:scanl(+)1f
foldr1(\x y->y+x*2*2^floor(logBase 2.read.show$y)).(`take`f)

เวอร์ชันที่ไม่ถูกปรับแต่ง:

import Data.Bits

fib = 0:scanl (+) 1 fib

catInt :: Integer -> Integer -> Integer
catInt x y = x' + y where
    position = floor $ succ $ logBase 2 $ realToFrac y
    x' = shift x position

answer :: Integer -> Integer
answer n = foldr1 catInt fib' where
    fib' = take n fib

1
ยินดีต้อนรับสู่การเล่น PPCG และ Haskell โดยเฉพาะ! วิธีที่สั้นกว่าในการสร้างรายชื่อจำนวนฟีโบนัชชีที่ไม่สิ้นสุดคือf=0:scanl(+)1f(นำมาจากที่นี่ ) ฟังก์ชั่นสามารถระบุชื่อเพื่อให้คุณสามารถเลื่อนชั้นนำg=ให้ดูคู่มือกฎ Ggolfing ใน Haskell
Laikoni

ขอบคุณ! ที่ชดเชยฟังก์ชั่นที่ใช้งานได้นานขึ้น ฉันใช้เวลาสักพักขณะพยายามหาวิธีที่จะใช้การเลื่อนบิตในลักษณะที่กระชับยิ่งขึ้น แต่ก็สั้นลง
user9549915

คุณสามารถแทนที่$realToFrac yด้วย.read.show$yหนึ่งไบต์
H.PWiz


1

APL + WIN, 55 ไบต์

แสดงพร้อมต์สำหรับอินพุตหน้าจอของจำนวนเต็ม

v←b←0 1⋄⍎∊(⎕-2)⍴⊂'v←v,c←+/¯2↑v⋄b←b,((1+⌊2⍟c)⍴2)⊤c⋄'⋄2⊥b

ความแม่นยำสูงสุดของ APL + WIN คือ 17 และ จำกัด จำนวนเต็มของลำดับที่ 10E300 ดังนั้นจำนวนอินพุตสูงสุดคือ 55 และผลลัพธ์คือ: 1.2492739026634838E300



1

เยลลี่ 6 ไบต์

ḶÆḞBFḄ

ลองออนไลน์!

ช่วง owered -> n TH ÆḞจำนวน ibonacci -> จากธันวาคมเพื่อBinary -> Flatten -> จากinary เพื่อธันวาคม


ไม่เข้าใจภาษานี้ แต่ฉันคิดว่าผลลัพธ์ไม่ถูกต้องเสมอไป เช่นการป้อนข้อมูล10และคุณจะได้รับ16024033463มันไม่ถูกต้อง (คำตอบที่ถูกต้องคือ250375522)
Guoyang Qin



1

MATL , 21 ไบต์

0li:"yy+]xx&h"@B]&hXB

ลองออนไลน์!

คำอธิบาย

0l        % Push 0, then 1 (initial terms of the Fibonacci sequence)
i:"       % Do n times, where n is the input
  yy+     %   Duplicate top two numbers and push their sum
  ]       % End
xx        % Delete the last two results. The stack now contains the
          % first n Fibonacci numbers, starting at 0
&h        % Concatenate all numbers into a row vector
"         % For each
  @       %   Push current number
  B       %   Convert to binary. Gives a vector of 0 and 1
]         % End
&h        % Concatenate all vectors into a row vector
XB        % Convert from binary to decimal. Implicitly display

1

J , 25 ไบต์

2(#.;)<@#:@(1#.<:!|.)\@i.

ลองออนไลน์!

คำอธิบาย

2(#.;)<@#:@(1#.<:!|.)\@i.  Input: n
                       i.  Range [0, n)
                     \@    For each prefix
                  |.         Reverse
                 !           Binomial coefficient (vectorized)
               <:            Decrement
            1#.              Sum
        #:                   Convert to binary
      <                      Box
    ;                        Link. Join the contents in each box
2 #.                         Convert to decimal from base 2



1

PHP, 124 ไบต์

ลองออนไลน์!

ดังนั้นฉันจึงกำลังมองหาวิธีที่จะส่งออกตัวเลข fibonacci โดยใช้ซีรีส์จนกว่าฉันจะพบสิ่งนี้นี้ปรากฎว่าคุณสามารถคำนวณชุดฟีโบนักชีผ่านการปัดเศษได้ดังนั้นฉันจึงลองใช้ความท้าทายด้วยฟังก์ชั่นวนซ้ำ

ฉันพบวิธีการ "ปัดเศษ" ที่น่าสนใจจริง ๆ และอาจารย์ก็แสดงให้ฉันเห็นเมื่อไม่นานมานี้

รหัส

function f($n,$i=0,$b=''){ if($n>$i){$b.=
decbin(round(pow((sqrt(5)+1)/2,$i)/sqrt(5)));f($n,$i+1,$b);}else{echo bindec($b);}}

คำอธิบาย

function f($n,$i=0,$b=''){           #the function starts with $i=0, our nth-fib number
if($n>$i){                           #it stops once $n (the input) = the nth-fib
    $b.=decbin(                      #decbin returns an integer as bin, concatenates
        round(pow((sqrt(5)+1)/2,$i)/sqrt(5))    
                                       #the formula, basically roundign the expression
        );                           #it returns the (in this case) $i-th fib-number   
    f($n,$i+1,$b);                   #function is called again for the next index
}else{                               #and the current string for fibonacci

    echo bindec($b);                 #"echo" the result, bindec returns the base 10
                                     #value of a base 2 number
}
}

ตรวจสอบการโพสต์ stackoverflow นี้คำตอบที่ดีที่สุดอ้างถึงบทความเดียวกันใน Wikipedia


วิธีที่น่าสนใจที่จะทำมัน!
นาธานวู้ด

1

Stax , 9 ไบต์

ü1∞╓♪εw≤+

เรียกใช้และแก้ไขปัญหาได้ที่ staxlang.xyz!

คลายการแพค (10 ไบต์) และคำอธิบาย:

vr{|5|Bm|B
v             Decrement integer from input. Stax's Fibonacci sequence starts with 1 :(
 r            Integer range [0..n).
  {    m      Map a block over each value in an array.
   |5           Push nth Fibonacci number.
     |B         Convert to binary.
        |B    Implicit concatenate. Convert from binary. Implicit print.


1

Pyth, 27 ไบต์

JU2V-Q2=aJ+eJ@J_2)is.BM<JQ2

ชุดทดสอบ

Python 3 การแปล:
Q=eval(input())
J=list(range(2))
for i in range(Q-2):
    J.append(J[-1]+J[-2])
print(int(''.join(map("{0:b}".format,J[:Q])),2))

37 ไบต์

J[Z1)W<lJQ=aJ+eJ@J_2)Ig1QZ.?ijkm.BdJ2

ชุดทดสอบ

Python 3 การแปล:
Q=eval(input())
J=[0,1]
while len(J)<Q:
    J.append(J[-1]+J[-2])
if 1>=Q:
    print(0)
else:
    print(int(''.join(map("{0:b}".format,J)),2))



0

Jotlin , 59 ไบต์

g(l(0,1)){l(a.sum(),a[0])}.take(this).j(""){a[0].s(2)}.i(2)

โปรแกรมทดสอบ

data class Test(val input: Int, val output: Long)

val tests = listOf(
    Test(1, 0),
    Test(2, 1),
    Test(3, 3),
    Test(4, 14),
    Test(5, 59),
    Test(6, 477),
    Test(7, 7640),
    Test(8, 122253),
    Test(9, 3912117),
    Test(10, 250375522)
)
fun Int.r() = g(l(0,1)){l(a.sum(),a[0])}.take(this).j(""){a[0].s(2)}.i(2)

fun main(args: Array<String>) {
    for (r in tests) {
        println("${r.input.r()} vs ${r.output}")
    }
}

รองรับได้มากถึง 10 ตัวเปลี่ยน.i(2)เพื่อ.toLong(2)รองรับได้มากถึง 14 หากต้องการ



0

R , 244 180 179 ไบต์

i=ifelse;g=function(n)i(n<3,1,g(n-1)+g(n-2))
a=scan(,"");i(a==1,0,sum(2^(which(rev(unlist(sapply(g(2:a-1),function(x)(y=rev(as.numeric(intToBits(x))))[which(!!y)[1]:32]))>0))-1)))

ลองออนไลน์!

บันทึกบางไบต์ด้วยการเชื่อมต่อเวกเตอร์ตัวเลขเข้าด้วยกันไม่ใช่สตริง กรณีพิเศษสำหรับกรุ๊ปเลือด 0!


ฟังก์ชั่นเป็นที่ยอมรับ นอกจากนี้ยังมีประสิทธิภาพมากขึ้นในการเลื่อนผลลัพธ์ที่เหลือด้วยจำนวนบิตจากนั้นรบกวนเวกเตอร์ตัวเลข ดูคำตอบหลามของฉันหรือเดนนิส นี่เป็นประโยชน์เพิ่มเติมของการจัดการกรณี 0
qwr

codegolf.stackexchange.com/questions/4024/tips-for-golfing-in-r การเล่นกอล์ฟ R มากเกินไปสำหรับฉัน: /
qwr

@qwr คำตอบไม่ใช่ฟังก์ชั่น ฉันกำลังสร้างฟังก์ชั่นตัวช่วยเพราะมันจะต้องsapplyเป็นเวกเตอร์เนื่องจากความจริงที่ว่ามันเกิดซ้ำ มันไม่สามารถห่อทั้งหมดเป็นหนึ่งบรรทัด ตามที่คุณเห็นโปรแกรมจะขอให้ผู้ใช้ป้อนข้อมูลจากนั้นส่งคืนคำตอบ ifelseหนึ่งไบต์จะถูกบันทึกไว้โดยการสร้างทางลัดสำหรับ และ ... เราสามารถลบ,""จากscanใช่
Andreï Kostyrka
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.