বাইনারি ফিবোনাচি


31

চ্যালেঞ্জ

আপনাকে এমন একটি প্রোগ্রাম বা ফাংশন তৈরি করতে হবে যা ধনাত্মক পূর্ণসংখ্যার এন গ্রহণ করে, বাইনারিতে ফিবোনাকী অনুক্রমের প্রথম এন পদগুলিকে গণনা করে, এটি একটি একক বাইনারি সংখ্যায় ভাগ করে, সেই সংখ্যাটি দশমিক হিসাবে রূপান্তর করে এবং তার পরে দশমিককে আউটপুট দেয় পূর্ণসংখ্যা।

উদাহরণ স্বরূপ

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
Tio.run/##DYxBCoQwDAC/… থেকে 0 থেকে 20 পর্যন্ত পরীক্ষার কেস যুক্ত করা হয়েছে । প্রোগ্রামটির জন্য @ এলফালফাকে ক্রেডিট করুন।
নাথান উড

6
যেমনটি এখনও বলা হয়নি: পিপিসিজিতে আপনাকে স্বাগতম! ভাল প্রথম চ্যালেঞ্জ।
লাইকোনি

@ লাইকনি ধন্যবাদ!
নাথান উড

ভাষা-নির্দিষ্ট সীমাটি ঠিক কোথায় প্রয়োগ হয়? কোনও সি ফাংশন যা 32-বিট পূর্ণসংখ্যা ফেরত দেয় তা কি অনুমতি পাবে? পছন্দ করুন int32_t binary_concat_Fib(int n), যা ফলাফলের আউটপুট মান 2 to 31-1-এ সীমাবদ্ধ করবে। উদাহরণস্বরূপ আপনি সমস্ত সংক্ষিপ্ত বিট একটি পূর্ণসংখ্যায় ফিট করতে পারেন। অথবা ফাংশনটি এমন বিন্দু পর্যন্ত কাজ করা উচিত যেখানে বৃহত্তম ফিবোনাচি সংখ্যাটি নিজে থেকে কোনও পূর্ণসংখ্যায় ফিট করে না, তাই বিটগুলি সংযুক্ত করে প্রসারিত যথার্থতা গ্রহণ করে?
পিটার কর্ডস

1
এবং "দশমিক রূপান্তরিত" এ কী স্পষ্ট হওয়া উচিত, একটি পূর্ণসংখ্যা-> স্ট্রিং ফাংশনটি কল করা বা নিজের একটি লেখা? বিটগুলিকে একটি একক পূর্ণসংখ্যার সাথে সংযুক্ত করা আপনাকে চূড়ান্ত মানটির উপস্থাপনা দেয়। যদি আমি সঠিকভাবে বুঝতে পারি তবে ডেনিসের পাইথন উত্তরটি একটি পূর্ণসংখ্যা ফেরত চলেছে, কলারের কাছে ছেড়ে দিয়ে সেই মানটিকে দশমিক স্ট্রিংয়ে পরিণত করে বা যা কিছু করে তা করে। বিট-শিফ্ট অপারেটরগুলিকে সমর্থন করে এমন কম্পিউটারের ভাষাগুলিতে পূর্ণসংখ্যার মানগুলি দশমিক নয়, দশমিক নয়, যদি না তারা স্ট্রিংয়ে থাকে। শিফট / বিটওয়াইজ অপারেটরবিহীন ভাষাগুলিতে কোনও কিছুই কোনও বেসকে বোঝায় না।
পিটার কর্ডস

উত্তর:



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
নতুন কুইকের সাথে জগাখিচুড়ি করে, আমি দেখতে পেলাম যে প্রথম এন ফিবোনাচি নম্বরগুলি ব্যবহার করেও পাওয়া যাবে Ṛc’SƲƤযা অনুরূপ ক্রমগুলির জন্য কার্যকর হতে পারে।
মাইল মাইল


7

ব্রেনফাক , 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

pow2 এর সর্বোচ্চ ক্ষমতা যে থেকে যথাযথভাবে বেশী হয় সেখানে খুঁজে পেতে numsumএখন পর্যন্ত সংখ্যার সংমিশ্রণ। cat2 এর শক্তি যা আমার সামনে সম্মিলিতভাবে তুলতে numক্রমটি গুনতে হবে (যাতে আমি কেবল যুক্ত করতে সক্ষম হব)।numsum


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

লুপ: এর f_nচেয়ে কঠোরভাবে কম কিনা তা পরীক্ষা করে দেখুন pow

Truthy:

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

জিরো আউট জাঙ্ক। তারপরে, num* যুক্ত catকরুন sum। এরপরে, পরবর্তী ফিবোনাচি নম্বরটি লোড করুন (= f_(n-1); এটি উপস্থিত না থাকলে লুপ থেকে প্রস্থান করুন) এবং * তে সেট catকরুন । পরবর্তী লুপের জন্য প্রস্তুত করুন (আরও জঞ্জাল শূন্য, একের পর এক স্থান পরিবর্তন করবেন)।catpow

Falsey:

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

pow2 * তে সেট করুন pow, পুনরুদ্ধার করুন num

]

কোনও ফিবোনাচি নম্বর বাকি না হওয়া পর্যন্ত পুনরাবৃত্তি করুন।


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

পরিষ্কার আবর্জনা। ফলাফল সংখ্যার প্রতিটি অঙ্ক নিন এবং প্রতিটি আউটপুট (ascii)।


7

কাস্তে , 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

পিপিসিজিতে আপনাকে স্বাগতম! :)
DJMcMayhem

5

জাপট , 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
বাঃ! আমাকে মার!
শেগি

1
@ শেগি আমি জানতাম যে এই একজন আপনার বিরুদ্ধে প্রতিযোগিতা হতে চলেছে: পি
অলিভার

4

পাইথ, 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

পার্ল 6 , 38 বাইট

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

এটি অনলাইন চেষ্টা করুন!


1
নোট যে এই শুরু 200. উপরে লক্ষণীয়ভাবে ইনপুট সঙ্গে ধীর পেতে এটা 8 সম্পর্কে সেকেন্ড সময় লাগে 1000. একজন ইনপুট দিয়ে আউটপুট জেনারেট করতে (20 সেকেন্ড যদি আপনি এটি মুদ্রণ অন্তর্ভুক্ত করুন)
ব্র্যাড গিলবার্ট b2gills

3

জাভাস্ক্রিপ্ট (নোড.জেএস) , 70 65 58 57 55 বাইট

  • 2 বাইট হ্রাস করার জন্য শেগিকে ধন্যবাদ ('0 বি + সি -0 থেকে' 0 বি '+ সি)
f=(n,a=C=0,b=1)=>--n?f(n,b,a+b,C+=b.toString(2)):'0b'+C

এটি অনলাইন চেষ্টা করুন!


আপনি -0আরও 2 বাইট সংরক্ষণ করতে শেষে খালি করতে পারেন ।
শেগি


2

জে, 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। ধন্যবাদ পিটার কর্ডস!
  • -২ শূন্য করে নিবন্ধন করেmul

  • -1 এর পরিবর্তে কিছুটা লুপ ব্যবহার করে loopএবং push/ pop ecx(ক্রেডিট পিটার কর্ডস)।

ইনপুট ইন edi, আউটপুট ইন edx

.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ফিবি 2-এ শিফট এবং অ্যাড করতে ব্যবহার করুন। এছাড়াও, প্রতিটি বিট একবারে নিষ্কাশন করা অপ্রয়োজনীয়। bsr %eax, %ecxবাইনারি উপস্থাপনায় বিটের সংখ্যা খুঁজে পেতে ব্যবহার করুন এবং ডেনিসের পাইথন উত্তর যেমন করছেন, তেমন সিএল / অথবা মার্জ করার জন্য শিফট ব্যবহার করুন।
পিটার কর্ডস

1
আপনার clশিফট গণনাগুলির প্রয়োজন , সুতরাং আপনার লুপের কাউন্টারটি আলাদা রেগে (যেমন %edi) নিন এবং ব্যবহার করুন dec %edi / jnz(32-বিট কোডে 3 বাইট, 64-বিটে 4 বাইট)। 32-বিট কোডে, এটি পুশ / পপ ইক্সকে বাদ দেওয়া থেকে মোট 1 টি বাইট সংরক্ষণ করে। loopযখন সমস্যাটি আরও কঠিন করে তোলে তখন ব্যবহারের ফাঁদে পড়বেন না। (আপনার কলিং কনভেনশনটি ইতিমধ্যে কাস্টম, ক্লোবার্বারিং %ebx, সুতরাং আপনার ফাংশনটি কল করবেন না main) 1 বাইটের সুবিধা নেওয়ার সময় আপনি EAX এ ফিরে আসতে পারবেন xchg, আপনার যদি প্রয়োজন না হয় তবে মানসম্মত হওয়ার দরকার নেই।
পিটার কর্ডেস

1
আপনি যোগ করার inc %ecxসাথে সাথে শিফট কাউন্টের অতিরিক্তটি অতিরিক্ত বাম-শিফ্টের সাথে প্রতিস্থাপন করতে পারেন lea (%eax, %edx, 2), %edx। 32-বিটের জন্য বাইটে নিরপেক্ষ, x86-64 এর জন্য একটি সংরক্ষণ করে। তবে একটি নির্দেশনা সংরক্ষণ করে।
পিটার কর্ডেস

1
যতবার আমি loopকোড গল্ফ ব্যবহার করে শেষ করি তখন আমার কাছে নোংরা লাগে। বেশ নয়, তবে হতাশ হয়েছি যে আমি একটি সমানভাবে ছোট বাস্তবায়ন খুঁজে পাইনি যা এই ধীর নির্দেশকে এড়িয়ে গেল; কোড গলফ বাইরে loopআমার পোষা peeves অন্যতম । আমি আশা করি এটি আধুনিক সিপিইউগুলিতে দ্রুত ছিল, কারণ এটি আংশিক-পতাকা স্টল ছাড়াই প্রসারিত-নির্ভুলতা লুপগুলির জন্য খুব সুন্দর হবে তবে এটি এমন নয় এবং কেবল আপনার কোডটি ধীর করে দেয় এমন একটি অস্পষ্ট আকারের অপ্টিমাইজেশন নির্দেশ হিসাবে বিবেচনা করা উচিত।
পিটার কর্ডেস

1
যাইহোক, সুন্দর কাজ। পুশ / পপ / লুপ -> ডেসি / জেএনজেড ব্যতীত, আমি কোনও সঞ্চয় দেখছি না, কেবলমাত্র এলইএ স্পিডআপ যা কোড-আকারে নিরপেক্ষ। আমি সর্বদা ভাবতাম যে ট্রিক xor/ mulশূন্য তিনটি রেজিস্ট্রারের জন্য যদি কখনও সত্যিকারের ব্যবহারের কেস থাকে (আপনার কি কখনও এতগুলি শূন্যের দরকার আছে?) তবে 1এটি তৈরির অংশ হিসাবে ব্যবহার করা এটি আরও বোধগম্য করে তোলে।
পিটার কর্ডেস


2

হাস্কেল , 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
বিশেষত পিপিসিজি এবং হাস্কেল গল্ফিংয়ে আপনাকে স্বাগতম! ফিবোনাচি সংখ্যাগুলির একটি অসীম তালিকা তৈরি করার একটি ছোট উপায় হ'ল f=0:scanl(+)1f( এখান থেকে নেওয়া )। ফাংশনগুলি বেনামে থাকতে পারে, তাই আপনি অগ্রণীদের ড্রপ করতে পারেন g=, হাস্কেলের Ggolfing Rule এ আমাদের গাইড দেখুন ।
লাইকোনি

ধন্যবাদ! এটি ব্যবহৃত লম্বা কিছু ফাংশনগুলির ক্ষতিপূরণ দেয়। আমি আরও সংক্ষিপ্ত উপায়ে বিট-শিফটিং বাস্তবায়নের উপায় খুঁজতে গিয়ে কিছুটা সময় ব্যয় করেছি, তবে সংক্ষেপে এসেছি।
ব্যবহারকারী 9549915

আপনি এক বাইট $realToFrac yদিয়ে প্রতিস্থাপন করতে পারেন.read.show$y
এইচপিউইজ


1

এপিএল + উইন, 55 বাইট

পূর্ণসংখ্যার স্ক্রিন ইনপুট জন্য অনুরোধ জানানো হয়।

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

এপিএল + ডাব্লুআইএন'র সর্বাধিক পূর্ণসংখ্যার নির্ভুলতা 17 এবং পূর্ণসংখ্যা সীমা 10E300 এর ক্রম হিসাবে অতএব সর্বাধিক ইনপুট নম্বর 55 এবং ফলাফলটি: 1.2492739026634838E300



1

জেলি , 6 বাইট

ḶÆḞBFḄ

এটি অনলাইন চেষ্টা করুন!

owered পরিসীমা -> এনÆḞibonacci সংখ্যা -> ডিসেম্বর থেকে Binary -> Fতামা, দস্তা, সীসা ও টিনের মিশ্রধাতু -> থেকে inary ডিসেম্বর থেকে


এই ভাষাটি বুঝতে পারি নি তবে আমি ভেবেছিলাম আউটপুট সবসময় সঠিক হয় না। উদাহরণস্বরূপ ইনপুট 10এবং আপনি একটি পাবেন 16024033463, এটি ভুল (সঠিক উত্তরটি 250375522)।
গুয়ায়াং কিন

@ আব্রাহামচিন ইনপুট 10ফেরত250375522
ডেনিস

সমতুল্য, সদৃশ জবাব , মাত্র একটি মাথা উপরে
কেয়ারড coinheringaahing

1

এমএটিএল , 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

পিএইচপি, 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
}
}

এছাড়াও এই স্ট্যাকওভারফ্লো পোস্টটি পরীক্ষা করে দেখুন সেরা উত্তরটি উইকিপিডিয়ায় একই নিবন্ধকে বোঝায়।


এটি করার আকর্ষণীয় উপায়!
নাথান উড

1

স্ট্যাক্স , 9 বাইট

ü1∞╓♪εw≤+

এটি চালান এবং এটি স্ট্যাক্সএল.এক্সজে ডিবাগ করুন!

প্যাকযুক্ত (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

পাইথ, 27 বাইট

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

পরীক্ষা স্যুট

পাইথন 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

পরীক্ষা স্যুট

পাইথন 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

জটলিন , 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

পাইথন 2, 88 বাইট

def f(n):
 a,b,r=0,1,"0"
 for _ in range(n-1):a,b=b,a+b;r+=bin(a)[2:]
 print int(r,2)

0

আর , 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


@Qwr উত্তরটি কোনও ফাংশন নয়; আমি একটি সহায়ক ফাংশন তৈরি করছি কারণ এটি অবশ্যই sapplyপুনরাবৃত্ত হওয়ার কারণে এটি কোনও ভেক্টরের কাছে অবশ্যই হবে । এটি সব এক লাইনে আবৃত করা যায় না। আপনি দেখতে পাচ্ছেন, প্রোগ্রামটি ব্যবহারকারীদের ইনপুটটির জন্য অনুরোধ করে এবং তারপরে উত্তরটি দেয়। এক বাইট জন্য একটি শর্টকাট তৈরি করে সংরক্ষণ করা যাবে ifelse। এবং ... আমরা হ্যাঁ ,""থেকে সরাতে পারি scan
Andreï Kostyrka
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.