ফিবোনাচি উল্টো!


42

ভূমিকা

আমরা সকলেই আমাদের ফিবোনাচি ক্রমটি জানি এবং ভালবাসি এবং ইতিমধ্যে এখানে ইতিমধ্যে একটি চ্যালেঞ্জের অস্তিত্ব দেখেছি। তবে, আমাদের এখনও একটি খুব সাধারণ কেস নেই যা এই উত্তরটি প্রদান করবে: বিপরীত ফিবোনাচি! সুতরাং F_nআপনার কাজ দেওয়া সন্ধান করা হয় n

সবিস্তার বিবরণী

ইনপুট

আপনার ইনপুটটি একটি অ-নেতিবাচক পূর্ণসংখ্যা হবে, যা ফিবোনাচি অনুক্রমের অংশ হওয়ার গ্যারান্টিযুক্ত।

আউটপুট

আউটপুটটি অবশ্যই একটি অ-নেতিবাচক পূর্ণসংখ্যার হতে হবে।

কি করো?

ভূমিকা ইতিমধ্যে বলেছে: একটি ফাইবোনাকি নম্বর দেওয়া, তার সূচকটি আউটপুট করুন। ফিবোয়ানসি নম্বরটি এর মাধ্যমে সংজ্ঞায়িত করা হয়েছে F(0)=0, F(1)=1, F(n)=F(n-1)+F(n-2)এবং আপনাকে দেওয়া হয়েছে F(n)এবং অবশ্যই ফিরতে হবে n

সম্ভাব্য কর্নার কেস

0 একটি বৈধ ইন- এবং আউটপুট।
যদি ইনপুট হিসাবে "1" দেওয়া হয় তবে আপনি পছন্দ অনুযায়ী "1" বা "2" আউটপুট দিতে পারেন।
আপনি সবসময় ধরে নিতে পারেন যে আপনার ইনপুটটি আসলে একটি ফিবোনাচি নম্বর।
আপনি ধরে নিতে পারেন যে ইনপুটটি 32-বিট স্বাক্ষরিত পূর্ণসংখ্যা হিসাবে প্রতিনিধিত্বযোগ্য।

কে জিতলো?

এটি কোড-গল্ফ তাই বাইটের সংক্ষিপ্ত উত্তরটি জয়!
স্ট্যান্ডার্ড নিয়ম অবশ্যই প্রয়োগ করা হয়।

টেস্ট-মামলা

0 -> 0
2 -> 3
3 -> 4
5 -> 5
8 -> 6
13 -> 7
1836311903 -> 46

39
একটু নিট-বাছাই: এই বিবেচনা করা উচিত বিপরীত Fibonacci en.m.wikipedia.org/wiki/Inverse_function
মাইকেল

19
তো, আইকানবিবিএফ ?!

6
@ মিশেল এটি ফিবোনাকির বিপরীত নয়, কারণ ফিবোনাচি ফাংশনের কোনও বিপরীত নেই কারণ এটি ইনজেকশন নয় (কারণ "1" দু'বার প্রদর্শিত হয়েছে)। বিপরীতটি মূলত "বিপরীত সারণী চেহারা" এর ধারণা থেকে এসেছে যা আমি এখানে লোকেরা করার আশা করছিলাম (উদাহরণস্বরূপ আমি সমস্যাটি সমাধানের জন্য এটি করার জন্য তাদের প্রত্যাশা করেছি)।
SEJPM

9
এখানে ফাংশনটি ফিবোনাচি সংখ্যার অ-নেতিবাচক পূর্ণসংখ্যার থেকে "ফিবোনাচি ফাংশন" এর সঠিক বিপরীত হিসাবে বিবেচনা করা যেতে পারে । একটি সঠিক বিপরীত অস্তিত্ব ইনজেকটিভিটি বোঝায় না।
ডেনিস

1
@ এসজেপিএম: যদিও আমি "এমন একটি প্রোগ্রাম লিখি যা ফাইবোনাকির ক্রমটি পিছনের দিকে বের করে দেয়" এর মতো একটি কাজ আশা করেছিলাম।
বার্গি

উত্তর:


58

আসলে, 1 বাইট

f

হ্যাঁ, এটির জন্য একটি বিল্টিন রয়েছে, নভেম্বর 16, 2015 থেকে

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


মজাদার জন্য, বিল্টিন ছাড়া এটি 9 টি বাইট:

╗1`F╜=`╓i

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

ব্যাখ্যা:

╗1`F╜=`╓i
╗          push input to register 0
 1`F╜=`╓   push list containing first value x (starting with x = 0) where:
   F         fib(x)
    ╜=       is equal to the input
        i  flatten the list

15
আমি যখন দেখি তখনই আমার একটি চিন্তাভাবনা এবং একটি চিন্তা থাকে: ಠ_ಠ
অ্যাডিসন ক্রম্প

37
আমি কেন বুঝতে পারছি না যে আপনি কেন এইরকম হাস্যকর নির্দিষ্ট উদ্দেশ্যে প্রতীককে "নষ্ট" করবেন
ফ্যাটালাইজ করবেন

19
@ ফ্যাটালাইজ দি ফিবোনাচি এবং বিপরীত ফিবোনাচি ফাংশনগুলি আমি প্রথম যুক্ত করেছি among এখনও, এখানে 39 সম্পূর্ণ অব্যবহৃত একক-বাইট কমান্ড রয়েছে (এবং কে জানে যে কতগুলি ওভারলোড ব্যবহার করা যেতে পারে)। প্রকৃতপক্ষে 5 ধরণের (পূর্ণসংখ্যা, রিয়েল, স্ট্রিং, আইটেবল, ফাংশন) এই সত্যের সাথে মিলিত 256 টি চিহ্ন, এর অর্থ হল 1280 অবধি সম্ভাব্য আনারি ফাংশন এবং 6400 সম্ভাব্য বাইনারি ফাংশন রয়েছে। একটা ব্যাপার অনেক আপাতদৃষ্টিতে-অকাজের কমান্ড জন্য ঘর থেকে।
মেগো

23
@ মেগো আপনি কি সর্বাধিক বিল্টিনগুলির জন্য ম্যাথমেটিকার সাথে প্রতিযোগিতা করার চেষ্টা করছেন?
gcampbell

13
আসলে, এটি কেবল একটি বাইট ... হ্যাঁ, এই ভাষার নামটি পছন্দ করুন।
নিকেল

42

গণিত, 25 বাইট

InverseFunction@Fibonacci

ফাংশন। আপনি আমাকে জিজ্ঞাসা যদি খুব স্ব-ব্যাখ্যা।


31

পাইথন, 36 34 32 বাইট

lambda n:len(str(66*n**6))//1.24

পূর্বের সংস্করণসমূহ:

f=lambda n:len(str(66*n**6))//1.24
f=lambda n:(n*n*7).bit_length()//1.4

ব্যাখ্যা

মূল ধারণাটি সূত্রটি উল্টানো

fibonacci(n) ~ ( (1 + sqrt(5)) / 2)**n / sqrt(5)

যা আমাদের তা বলে

log fibonacci(n) ~ n log((1 + sqrt(5)) / 2) - log(sqrt(5))

পেতে

f(n) ~ (log(n) + log(sqrt(5))) / log((1 + sqrt(5))/2)

গল্ফিং অপ্টিমাইজেশানগুলি হ'ল:

  • len(str(n))আমদানি না করে লগ বেস 10 গণনা করতে ব্যবহার করুন log( .bit_length()লগ বেস 2 গণনা করার জন্য পুরানো সংস্করণ ব্যবহৃত হয়েছে)
  • nএকটি শক্তিতে উত্থাপন করুন , যাতে লগারিদমের সমাপ্তি ক্রমাগত ফিবোনাচি সংখ্যার মধ্যে পার্থক্য করতে পারে
  • একটি ধ্রুবক স্কেল দ্বারা গুণিত করে মানগুলিকে সঠিক পরিসীমাতে পেতে up

তারপরে বিভাজকটি যতটুকু সামঞ্জস্য করতে পারলাম তত কম নির্ভুলতায় কাটা হয়েছিল এবং গুণকটি সমস্ত 32-বিট ফিবোনাচি সংখ্যার জন্য সঠিক ফলাফল দেওয়ার জন্য বেছে নিয়েছিল।


এটি 32 বাইট হওয়া উচিত, কারণ f=এটি গণনা করা হয় না।
ফাঁস নুন

2
উপরের মন্তব্যটি ইতিমধ্যে বলেছে, বেনামে ফাংশন / নামবিহীন ল্যাম্বডাস ডিফল্টরূপে অনুমোদিত । এছাড়াও, যদি আপনি পাইথন 2 এ আপনার উত্তর সীমাবদ্ধ করে থাকেন এবং একটি দীর্ঘ যুক্তির প্রয়োজন হয়, lambda n:~-len(`66*n**6`)//1.24কাজ করা উচিত।
ডেনিস


10

জেলি, 14 11 বাইট

5½×lØp+.Ḟ»0

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

এটি আমার প্রথম জেলি উত্তর! এটি এমএটিএল উত্তর থেকে অ্যালগরিদম ব্যবহার করে । ডেনিসকে 3 বাইট শেভ করার জন্য ধন্যবাদ!

ব্যাখ্যা:

   lØp      # Log Base phi
5½          # Of the square root of 5
  ×         # Times the input
      +     # Plus
       .    # 0.5
        Ḟ   # Floored

এটি সঠিক উত্তর পেয়েছে, এখন আমাদের কেবল '0' এর বিশেষ কেসটি পরিচালনা করতে হবে। আরগ হিসাবে '0' দিয়ে আমরা পাই -infinity, তাই আমরা ফিরে আসি

»      # The maximum of 
 0     # Zero
       # And the previous calculated value.

7
+1 কারণ ব্যাখ্যাটিতে করা মন্তব্যগুলি একটি লাইম্রিকের সমাপ্তি।
ড্যানিয়েল

10

জুলিয়া, 27 26 18 বাইট

!n=log(3n+.7)÷.48

এটি বিনেটের সূত্রের বিপরীত ব্যবহার করে , 32-বিট পূর্ণসংখ্যার জন্য পর্যাপ্ত যথার্থতা সহ; এটি আসলে এফ (153) = 42,230,279,526,998,466,217,810,220,532,898> 2 105 পর্যন্ত কাজ করে

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

কিভাবে এটা কাজ করে

বিনেটের সূত্রটি নীচে উল্লেখ করে।

বিনেটের সূত্র

ফিবোনাচ্চির সেটে F সীমাবদ্ধ করে মানচিত্রের n → F n এর ডানদিকে বিপরীত F → n F রয়েছে

আমাদের তা আছে

বিনেটের সূত্রের ঠিক বিপরীত

এবং যা করা বাকি তা হ'ল প্রান্ত কেস 0 নিয়ে কাজ করা

ইনপুটটি 32-বিট পূর্ণসংখ্যার মধ্যে সীমাবদ্ধ বিধায় আমরা সূত্রটিতে স্থিরদের পরিবর্তে সংক্ষিপ্ত দশমিক আক্ষরিক ব্যবহার করতে পারি।

  • লগ φ = 0.481211825059603447… ≈ 0.48

    দুর্ভাগ্যক্রমে, 0.5 যথেষ্ট সুনির্দিষ্ট নয়।

  • √5 = 2.2360679774997896964… ≈ 3

    এটি প্রথম নজরে একটি ভয়াবহ অনুমানের মতো মনে হতে পারে তবে আমরা লগারিদমগুলি নিচ্ছি এবং লগ 3 - লগ √5 = 0.29389333245105… , গোল করার আগে ফলাফলটি একটি ছোট ধ্রুবক কারণ দ্বারা বন্ধ হয়ে যাবে be

  • 0.5। 0.7

    পূর্ববর্তী অনুমানের চেয়ে অতিরিক্ত হওয়ার কারণে আমরা আসলে এই শব্দটিকে পুরোপুরি বাদ দিতে পারি এবং এখনও এফ> 0 এর সঠিক ফলাফল পেতে পারি । তবে, যদি F = 0 হয় , লগারিদম অপরিজ্ঞাত হবে। 0.7 সংক্ষিপ্ততম মান হিসাবে রূপান্তরিত হয়েছিল যা আমাদের সূত্রটিকে F = 0 এ প্রসারিত করে ।


8

জাভাস্ক্রিপ্ট, 54 50 69 50 42 বাইট

b=>(j=>{for(i=c=0;b-i;c++)i=j+(j=i)})(1)|c

অবশ্যই এটি জিতবে না, কেবল মজাদার জন্য :)

ঠিক আছে, শূন্যের জন্য পরীক্ষা করা 19 বাইট গ্রহণ করে। ডব্লিউটিএফ? আমাকে বোকা বানাও.


ডেমো! শেষ পরীক্ষার কেসটি দেখতে আপনাকে কনসোলটি কিছুটা স্ক্রোল করতে হবে।

a=b=>(j=>{for(i=c=0;b-i;c++)i=j+(j=i)})(1)|c;
console.log('0: '+a(0));
console.log('2: '+a(2));
console.log('3: '+a(3));
console.log('5: '+a(5));
console.log('8: '+a(8));
console.log('13: '+a(13));
console.log('1836311903: '+a(1836311903));

8 বাইট দ্বারা সংক্ষিপ্ত করার জন্য @ এডিসি ধন্যবাদ।


সাধারণ b=>{for(j=1,i=c=0;b-i;c++)i=j+(j=i);return c}45, গল্ফড b=>(j=>{for(i=c=0;b-i;c++)i=j+(j=i)})(1)|c42.
edc65

1
@ এডিসি ওয়া, এটি চালাক, ধন্যবাদ <3
নিকেল

8

পার্ল 6  33 30  27 বাইট

{first *==$_,:k,(0,1,*+*...*>$_)}
{first *==$_,:k,(0,1,*+*...*)}
{first $_,:k,(0,1,*+*...*)}

চেষ্টা করে দেখুন

ব্যাখ্যা:

# lambda with implicit 「$_」 parameter
{
  first           # find the first element
    $_,           # where something is equal to the block's argument
    :k,           # return the key rather than the value

    # of the Fibonacci sequence
    ( 0, 1, * + * ... * )
    # ^--^ first two values
    #       ^---^ lambda used to generate the next in the series
    #             ^-^ generate until
    #                 ^ Whatever
}

টেস্ট:

#! /usr/bin/env perl6
use v6.c;
use Test;

# using the safer version that stops generating
# values bigger than the input
my &fib-index = {first $_,:k,(0,1,*+*...*>$_)}

my @tests = (
  0 => 0,
  2 => 3,
  3 => 4,
  5 => 5,
  8 => 6,
  13 => 7,
  1836311903 => 46,
  1836311904 => Nil, # this is why the safe version is used here
  12200160415121876738 => 93,
  19740274219868223167 => 94,
  354224848179261915075 => 100,
);

plan +@tests + 1;

for @tests -> $_ ( :key($input), :value($expected) ) {
  cmp-ok fib-index($input), &[eqv], $expected, .gist
}

cmp-ok fib-index((0,1,*+*...*)[1000]), &[eqv], 1000, 'works up to 1000th element of Fibonacci sequence'
1..13
ok 1 - 0 => 0
ok 2 - 2 => 3
ok 3 - 3 => 4
ok 4 - 5 => 5
ok 5 - 8 => 6
ok 6 - 13 => 7
ok 7 - 1836311903 => 46
ok 8 - 1836311904 => Nil
ok 9 - 12200160415121876738 => 93
ok 10 - 19740274219868223167 => 94
ok 11 - 354224848179261915075 => 100
ok 12 - works up to 1000th element of Fibonacci sequence

1
আপনি ন্যায়বিচারের first *==$_সাথে প্রতিস্থাপন করতে পারেন first $_, কারণ একটি সংখ্যাটি একটি বৈধ স্মার্ট ম্যাচার।
স্মলস

...পরিবর্তে অপারেটরটি ব্যবহার করে 24 বাইটfirst
জো কিং

7

জেলি , 8 বাইট

1+С0
¢i

এটি অনলাইন চেষ্টা করুন! নোট করুন যে এই পরীক্ষাটি গত পরীক্ষার ক্ষেত্রে খুব অদক্ষ।

কিভাবে এটা কাজ করে

¢i     Main link. Argument: n

¢      Call the helper link niladically (i.e., without arguments).
       This yields the sequence of the first n positive Fibonacci numbers, i.e.,
       [1, 1, 2, 3, 5, ...].
 i     Find the first index of n (1-based, 0 if not found).


1+С0  Helper link. No arguments.

1      Set the left argument to 1.
    0  Yield 0.
 +С   Add both arguments, replacing the left argument with the sum and the right
       argument with the previous value of the left argument.
       Yield the array of all intermediate values of the left argument.


5

পাইথন, 29 বাইট

g=lambda n:n>.7and-~g(n/1.61)

পুনরাবৃত্তভাবে ইনপুটটি 0.7 এর নীচে না হওয়া অবধি সোনালী-অনুপাতের প্রায় 1.61 দ্বারা ভাগ করে দেয় এবং বিভাজনের সংখ্যা আউটপুট করে।

0 এর জন্য, কোড আউটপুটস False, যা পাইথনে 0 সমান । এটি 2 বাইটের জন্য এড়ানো যায়

g=lambda n:n//.7and 1+g(n/1.61)

4

জাভাস্ক্রিপ্ট (ES6), 39 33 বাইট

f=(n,j=0,k=1)=>n>j?f(n,k,j+k)+1:0

এমনকি ES7 এর সাথে, বিপরীত বিনেট সূত্রটি 47 বাইট নেয়:

x=>Math.log(x*5**.5)/Math.log(.5+1.25**.5)+.5|0
x=>Math.log(x*5**.5)/Math.log((1+5**.5)/2)+.5|0
x=>Math.log(x*(p=5**.5))/Math.log((1+p)/2)+.5|0

কেবল বিতরণ করুন logএবং সমস্ত ধ্রুবককে পূর্বরূপ করুন ...
চার্লি

আইএমএইচও, আপনি যদি নাম অনুসারে লম্বা বারবার ডাকেন f(n,k,j+k), আপনার অবশ্যই এই নিয়োগটি অন্তর্ভুক্ত করা উচিত f=এবং এটি +2 বাইট হিসাবে গণনা করা উচিত । নামবিহীন ল্যাম্বডাসের নিয়মটি এখানে প্রয়োগ করা উচিত নয়।
চার্লি

@ চার্লি দুঃখিত, আমি সবসময় সে সম্পর্কে ভুলে গেছি। সংশোধন করা হয়েছে।
নিল

4

সেজ, 49 বাইট

lambda x,s=sqrt(5):x and int(log(x*s,(1+s)/2)+.5)

সংরক্ষণ সম্পর্কে পরামর্শের জন্য TuukkaX ধন্যবাদ sqrt(5)যেমন sকয়েক বাইট বন্ধ শেভ।

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

বিনেটের সূত্রের একটি বিপরীত ব্যবহার করে এই পদ্ধতির আগের পদ্ধতির তুলনায় বেশ কয়েকটি উন্নতি দেওয়া হয়েছে: এটি দ্রুত (ধ্রুবক সময় বনাম চতুর্ভুজ সময়), এটি আসলে বৃহত্তর ইনপুটগুলির জন্য কাজ করে এবং এটি আরও খাটো হয়!

পাইথন ব্যবহারকারীরা ভাবতে পারেন যে আমি কেন sqrt(5)সংক্ষিপ্তের পরিবর্তে ব্যবহার করছি 5**.5- এটি কারণ 5**.5সি এর powফাংশনটির সাথে গণনা করা হয়েছে এবং ভাসমান পয়েন্ট সম্পর্কিত সমস্যার কারণে যথাযথতা হারাবে। অনেক গাণিতিক ফাংশন (সহ sqrtএবং log) সেজগুলিতে একটি সঠিক, প্রতীকী মানটি ফেরত দেওয়ার জন্য ওভারলোড হয় যা নির্ভুলতা হারাবে না।


আমি সেজ মোটেও জানি না তবে আপনি কি sqrt(5)ভেরিয়েবলটি ধরে রেখে বাইটস সংরক্ষণ করতে পারবেন এবং দু'বার টাইপ না করে একবার ব্যবহার করতে পারবেন sqrt(5)?
ইয়াতসি

4

এমএটিএল , 14 বাইট

t?5X^*17L&YlYo

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

এটি বিনেটের সূত্রের বিপরীত ব্যবহার করে এবং তাই এটি খুব দ্রুত।

আসুন এফ বোঝাতে এন ফিবানচি সংখ্যা -th এবং φ সুবর্ণ অনুপাত । তারপর

এখানে চিত্র বর্ণনা লিখুন

কোডটি দুটি সূত্র সহ এই সূত্রটি ব্যবহার করে:

  • 1/2 যোগ করার পরিবর্তে এবং পরে গোল করে, কোডটি কেবলমাত্র নিকটতম পূর্ণসংখ্যার দিকে গোল করে, যা কম বাইট নেয়।
  • ইনপুট এফ = 0 কে একটি বিশেষ কেস হিসাবে বিবেচনা করা দরকার।

কিভাবে এটা হলো

t         % Take input F implicitly. Make a copy
?         % If (copy of) F is positive
  5X^     %   Push sqrt(5)
  *       %   Multiply by F
  17L     %   Push phi (predefined literal)
  &Yl     %   Two-input logarithm: first input is argument, second is base
  Yo      %   Round towards nearest integer
          % Else the input, which is 0, is left on the stack
          % End if implicitly
          % Display implicitly

1
বিকল্প পদ্ধতির:O1G:"yy+]vGmfq
ডিজেএমসিএমহেম

1
11 বাইট:t?17L&YlXkQ
জিমি 23013

@ jimmy23013 চমৎকার পন্থা! আপনার অবশ্যই একটি পৃথক উত্তর হিসাবে অবশ্যই পোস্ট করা উচিত
লুইস মেন্ডো

আমি এটি অন্য উত্তর মূল্য বলে মনে করি না, কারণ এটি মুছে ফেলার একমাত্র উপায় 5X^*। ( আমি এটি আগেও করেছি )) এবং আমি এমএটিএলকে সম্ভবত এটির উন্নতি করার পক্ষে যথেষ্ট জানি না।
jimmy23013


3

জাভাস্ক্রিপ্ট, 22 বাইট

n=>Math.log(n)/.48+2|0

আমি মনে করি না যখন আমি দেখে এই কাজ করবে, কিন্তু দৃশ্যত -Infinity|0হয় 0জাভাস্ক্রিপ্ট হবে। চিত্রে যান.
ডেনিস

@ ডেনিস: জেএসে, বিটওয়াইড অপারেটররা কেবল সর্বশেষ 32 বিট নেয় এবং -Infinity = FFF00000 00000000। আমি এটি জানতে পেরে খুশি হয়েছিলাম, এটি স্পষ্টভাবে শূন্য পরীক্ষার মতো প্রিপেন্ড না করানোর জন্য 3 বাইট ছাড়ায় n&&। তা ছাড়া মূল উদ্দেশ্যটির |0বিকল্প Math.trunc()( ÷জুলিয়ার মতো ) is
চার্লি

3

সি, 62 58 বাইট

g(c,a,b){return c-a?g(c,b,a+b)+1:0;}f(c){return g(c,0,1);}

বিশদ

int g(int c, int a, int b)
{
    if (c == a)
    {
        return 0;
    }
    else
    {
        return g(c, b, a+b) + 1;
    }
}

int f(c)
{
    return g(c, 0, 1);
}

3

জাভা 7, 70 বাইট

int c(int n){int a=0,b=1,c=0,t;while(a<n){c++;t=b;b+=a;a=t;}return c;}

https://ideone.com/I4rUC5


2
পিপিসিজিতে স্বাগতম, প্রথম প্রথম উত্তর!
লিকি নুন

int c(int n){int a=0,b=1,c=0,t;for(;a<n;t=b,b+=a,a=t)c++;return c;}(পরীক্ষিত নয়)
লিকি নুন

int c(int n){int a=0,b=1,c=0;while(a<n){c++;b+=a;a=b-a;}return c;}(পরীক্ষিত নয়)
লিকি নুন

2
int c(int n){int a=0,b=1,c=0;for(;a<n;b+=a,a=b-a)c++;return c;}(পরীক্ষিত নয়)
লিকি নুন

2

টিএসকিউএল, 143 বাইট

ইনপুট @nহিসাবে হিসাবে যায়DECLARE @n INT = 1836311903;

DECLARE @O BIGINT=0;WITH F(R,P,N)AS(SELECT @O,@O,@O+1 UNION ALL SELECT R+1,N,P+N FROM F WHERE N<=@n)SELECT MAX(R)FROM F OPTION(MAXRECURSION 0);


2

সেসোস , 28 বাইট

Hexdump:

0000000: 16f8be 766ef7 ae6d80 f90bde b563f0 7ded18 3ceffa  ...vn..m.....c.}..<..
0000015: b1c1bb af9f3f ff                                  .....?.

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

(এক্সফেনশনাল সময় কারণ সেসোসে কোনও সংখ্যার অনুলিপি করার জন্য তাত্পর্যপূর্ণ সময় প্রয়োজন))

বাইনারি ফাইল জেনারেট করার জন্য অ্যাসেম্বলি

set numin
set numout
get
jmp
sub 1
fwd 1
add 1
fwd 1
add 1
rwd 2
jnz    ;input input
fwd 4
add 1  ;input input 0 1
fwd 2
add 1  ;input input 0 1 0 1
rwd 4
jmp
jmp    ;input input-curr curr next iterations
sub 1
jnz    ;input 0 curr next iterations
fwd 3
add 1
jmp
sub 1
fwd 2
add 1
rwd 2
jnz    ;input 0 curr next 0 0 iterations+1
rwd 1
jmp
sub 1
fwd 1
add 1
fwd 1
add 1
rwd 2
jnz    ;input 0 curr 0 next next iterations+1
rwd 1
jmp
sub 1
fwd 1
sub 1
fwd 2
add 1
rwd 3
jnz    ;input 0 0 -curr next curr+next iterations+1
rwd 2
jmp
sub 1
fwd 2
add 1
fwd 1
add 1
rwd 3
jnz    ;0 0 input input-curr next curr+next iterations+1
fwd 3
jnz
fwd 3
put

2

জাভা 8 61 বাইট

@ দাইনিচি উত্তর হিসাবে একইভাবে জাভা 8 লম্বাডাস ব্যবহার করে আরও খাটো করা হয়েছে। উত্তরটি একটি বৈধ রুল্যু এক্সপ্রেশন।

n->{int a=0,b=1,c=0,t;while(a<n){c++;t=b;b+=a;a=t;}return c;}

Ungolfed:

interface F
{
    int c(int n);
}

public class Main
{

    public static void main(String[] args)
    {
        F f = n->{int a=0,b=1,c=0,t;while(a<n){c++;t=b;b+=a;a=t;}return c;};
    }
}


1

জাভা 7, 89 বাইট

int c(int n){int i=-1;while(f(++i)<n);return i;}int f(int n){return n<2?n:f(n-1)+f(n-2);}

@ আদনানের 05AB1E উত্তরের ব্যাখ্যা দ্বারা অনুপ্রাণিত ।

অবহেলিত ও পরীক্ষার কেস:

এখানে চেষ্টা করুন। (শেষ পরীক্ষার ক্ষেত্রে সময়সীমা অতিক্রম করেছে, তবে এটি আমার পিসিতে প্রায় 30-45 সেকেন্ডে কাজ করে))

class Main{
  static int c(int n){
    int i = -1;
    while(f(++i) < n);
    return i;
  }

  static int f(int n){
    return n < 2
             ? n
             : f(n - 1) + f(n - 2);
  }

  public static void main(String[] a){
    System.out.println(c(0));
    System.out.println(c(2));
    System.out.println(c(3));
    System.out.println(c(5));
    System.out.println(c(8));
    System.out.println(c(1836311903));
  }
}

আউটপুট:

0
3
4
5
6
46


1

জে, 32 27 17 বাইট

i.~0,+/@(!|.)\@i.

প্রথম এন ফিবোনাচি সংখ্যাগুলি গণনা করে তারপরে n এর সূচি খুঁজে বের করে সেই তালিকাতে ।

ব্যবহার

একাধিক ইনপুট / আউটপুট ফর্ম্যাট করার জন্য অতিরিক্ত কমান্ড ব্যবহার করা হয়। শেষ পরীক্ষার কেস বাদ দেওয়া হয়েছে কারণ এটি গণনা করতে আরও অনেক সময় প্রয়োজন।

   f =: i.~0,+/@(!|.)\@i.
   (,.f"0) 0 1 2 3 5 8 13
 0 0
 1 1
 2 3
 3 4
 5 5
 8 6
13 7

ব্যাখ্যা

i.~0,+/@(!|.)\@i.  Input: n
               i.  Get the range [0, 1, ..., n-1]
             \@    For each prefix of that range
          |.         Reverse the prefix
         !           Find the binomial coefficient between each value in the original
                     prefix and the reversed prefix
     +/@             Sum those binomial coefficients
                   This will create the Fibonacci numbers from 1 to n
   0,              Prepend a 0 to the list of Fibonacci numbers
i.~                Find the index of n in that list and return

1

গণিত, 30 বাইট

Round@Log[5^.5/2+.5,.8+5^.5#]&

খাঁটি ফাংশন; ইনপুট 1 হলে 2 প্রদান করে।

অন্যান্য ম্যাথমেটিকা ​​প্রবেশকে পরাজিত করে না, তবে একটি অস্বাভাবিক পদ্ধতি প্রদর্শন করে: এটি একটি (খুব শীতল) সত্য যে এনথ ফিবোনাকির সংখ্যাটি সোনালী অনুপাতের নবম শক্তি [1 / বর্গ (5) বারের নিকটতম পূর্ণসংখ্যার] (" বিনেটের সূত্র ")।

সুতরাং বিপরীতমুখী ফাংশনটি হবে - [সুবর্ণ অনুপাত] লগারিদম [প্রশ্নে ফিবাওনাচি সংখ্যা] এর [স্কয়ার্ট (5) গুণ]] .8+অন্যান্য মান আপ screwing ছাড়া নিশ্চিত আমরা 0 লগারিদম নিতে না, একটি হ্যাক হয়।



1

ব্র্যাচল্যাগ , 14 বাইট

≜∧0;1⟨t≡+⟩ⁱ↖?h

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

আউটপুট ভেরিয়েবলের মাধ্যমে ইনপুট নেয় এবং ইনপুট ভেরিয়েবলের মাধ্যমে আউটপুট দেয়।

≜                 Label the input variable, trying 0, 1, -1, 2...,
  0               then starting with 0
 ∧                (which is not necessarily the input variable)
   ;1             paired with 1,
     ⟨t≡ ⟩        replace the first element of the pair with the last element
     ⟨ ≡+⟩        and the last element of the pair with the sum of the elements
          ⁱ↖?     a number of times equal to the input variable,
             h    such that the first element of the pair is the output variable.

কেন প্রয়োজনীয় তা আমি পুরোপুরি নিশ্চিত নই ।


0

জাভাস্ক্রিপ্ট (বাহ্যিক গ্রন্থাগার ব্যবহার করে) (৮৮ বাইট)

n=>_.Until((i,a)=>{l=a.length;if(a[l-1]!=n){return i<=1?i:a[l-1]+a[l-2]}}).Count()-1

লিবের লিঙ্ক: https://github.com/mvegh1/ গণনাযোগ্য

কোড ব্যাখ্যা: লাইব্রেরিতে স্থির পদ্ধতি রয়েছে যা প্রেকিটিকে একটি নির্ধারিত ফেরতের মান না দেওয়া পর্যন্ত একটি ক্রম তৈরি করে। শিকারীর ("আমি" এনডেক্স, বর্তমান অভ্যন্তরীণ "একটি" রে তৈরি করা) এর স্বাক্ষর রয়েছে। প্রতিটি পুনরাবৃত্তির সময় আমরা অভ্যন্তরীণ অ্যারের শেষ উপাদানটি ইনপুটটির সমান কিনা তা পরীক্ষা করি। যদি তা না হয় তবে fib ক্রমের পরবর্তী মানটি ফিরিয়ে দিন। অন্যথায়, শিকারীর একটি অনির্ধারিত ফলাফল রয়েছে যা ক্রমটির প্রজন্মকে সমাপ্ত করে। তারপরে, আমরা ক্রমটির দৈর্ঘ্য (এবং ওপিতে প্রদর্শিত 0 ভিত্তিক নেস মেনে চলার জন্য 1 বিয়োগ করে দেব)

এখানে চিত্র বর্ণনা লিখুন


এখান থেকে কোড ব্যবহার করে বাইটস n=>{a=c=t=0,b=1;while(a<n){c++;t=b;b+=a;a=t}return c} অনলাইনে এটি
pixma140
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.