ফিবোনাচি অনুক্রমের লিনিয়ার বিভাজন inter


20

আপনার টাস্ক খুঁজে পেতে এন ম ফিবানচি নম্বর, কিন্তু এন অগত্যা একটি পূর্ণসংখ্যা নয়।

ফিবোনাচি সিকোয়েন্স, 0-সূচকযুক্ত নীচে চলেছে:

0, 1, 2, 3, 4, 5,  6,  7, ...

1, 1, 2, 3, 5, 8, 13, 21, ...

তবে, আমরা 2 .4 তম নম্বর চাইলে কি হয় ?

2.4 ম সংখ্যা 0.4 বার 3 মধ্যে পার্থক্য য় এবং 2 য় ফিবানচি সংখ্যার প্লাস 2 য় ফিবানচি সংখ্যা। সুতরাং, 2.4 তম ফিবোনাচি সংখ্যাটি 2 + 0.4 * (3 – 2) = 2.4।

একইভাবে, 6.35 তম ফিবোনাচি নম্বরটি 13 + 0.35 * (21 – 13) = 15.8।

আপনার কাজটি হ'ল n ম ফিবোনাচি সংখ্যাটি সন্ধান করা, যেমন এন 0 এর চেয়ে বড় বা সমান।

আপনি এই শূন্য বা এক-সূচক করতে পারেন, দয়া করে আপনি কোনটি ব্যবহার করছেন তা বলুন।

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোড!

আরও কয়েকটি উদাহরণ:

0        1
4.5    6.5
0.7      1
7       21

2
আপনি এখানে যে অপারেশনটি করছেন এটির নাম "লিনিয়ার ইন্টারপোলেশন"। (যদি আমি পোস্টটির শিরোনামটি প্রতিফলিত করতে পরিবর্তন করি তবে আপনি কি আপত্তি করবেন?) এটিতে ফিবোনাকির সম্পত্তিটি চ (এন-2) + চ (এন-1) = চ (এন) বলে মনে হচ্ছে, সুতরাং আমার ধারণা এটি হ'ল ফিবোনাচি অনুক্রমের একটি যুক্তিসঙ্গত সাধারণীকরণ ization (কোনও মানক

@ আইস ৫২৩, আপনি যদি মনে করেন এটি প্রশ্নের উন্নতি করে তবে হ্যাঁ, আপনি পোস্টের শিরোনাম পরিবর্তন করতে পারেন।
— ড্যানিয়েল

আমি মনে করি কেউ ভবিষ্যতে অনুরূপ কিছু জিজ্ঞাসা করলে প্রশ্নটি আরও সহজ করা সম্ভব হবে এবং "সম্পর্কিত" তালিকায় এটি কী রয়েছে সে সম্পর্কে এটি আরও পরিষ্কার করে দিবে I সুতরাং উত্তরগুলি সঠিক জায়গায় পৌঁছে দেওয়ার সাহায্যে এটি প্রশ্নটিকে আরও উন্নত করবে।

2
@ আইস দেখে মনে হচ্ছে বিনেট সূত্রের একটি সাধারণীকরণ রয়েছে: mathworld.wolfram.com/FibonacciNumber.html
— নীল

1
যদিও কোড গল্ফকে অনুরোধটি ন্যায়সঙ্গত করতে হবে না (আমার ধারণা), এটি একটি অদ্ভুত ক্রিয়া বলে মনে হচ্ছে; এটি অনুসারে, যেহেতু F_0 = 0এবং F_2 = 1, আমাদের থাকা উচিত F_1 = (1/2)(F_0 + F_2) = 1/2।
— এলস্পাইস

উত্তর:


7

জেলি , 5 বাইট

_Ḟ1+¡

এটি বিল্ট-ইনগুলি ছাড়া একটি পুনরাবৃত্তি সমাধান। এটি চ্যালেঞ্জ অনুমান হিসাবে একই সূচক ব্যবহার করে।

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

পটভূমি

চ চ্যালেঞ্জ স্পেসে সংজ্ঞায়িত ফাংশন এবং এফ যথাক্রমে সংজ্ঞায়িত ফিবোনাচি ফাংশন হিসাবে চলুন (যেমন, সাথে এফ (0) = 0 )। অ-নেতিবাচক পূর্ণসংখ্যা n এর জন্য আমাদের কাছে f (n) = F (n + 1) রয়েছে । যখন 0 ≤ x <1 , চ্যালেঞ্জ স্পেসটি f (n + x) কে f (n) + (f (n + 1) - f (n)) x হিসাবে সংজ্ঞায়িত করে ।

স্পষ্টত, এই মাত্র বেস মামলা প্রভাবিত, কিন্তু না রিকার্সিভ সূত্র, অর্থাত, চ (ঢ) = F (N - 1) + F (ঢ - 2) ঝুলিতে যেমন জন্য would এফ । এর অর্থ আমরা সহজেই f (n) = f (n) + f (n - 1) x- তে পূর্ণসংখ্যার যুক্তির সংজ্ঞা সহজ করতে পারি ।

অন্যরা যেমন তাদের উত্তরগুলিতে উল্লেখ করেছে, পুনরাবৃত্তির সম্পর্কটি অ-পূর্ণসংখ্যার যুক্তিও রাখে। এটি সহজেই যাচাইযোগ্য as

প্রমাণ

যেহেতু f (0) = f (1) = 1 , f অন্তর্বর্তী স্থির মধ্যে [0, 1] এবং f (0 + x) = 1 সমস্ত এক্স এর জন্য । তদ্ব্যতীত, চ (-1) = এফ (0) 0 = , তাই চ (-1 + X) = চ (-1) + + (চ (0) - চ (-1)) এক্স = 0 টি + 1x = এক্স । এই বেস কেসগুলি [-1, 1) এ অন্তর্ভুক্ত রয়েছে , সুতরাং পুনরাবৃত্ত সূত্রের সাথে তারা এফ এর সংজ্ঞাটি সম্পূর্ণ করে ।

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

আগের মতো, আমাদের ++ প্রোগ্রামের একমাত্র যুক্তিটি হোক এন + এক্স let

¡একটি দ্রুত হয় যার অর্থ, এটির মধ্যে নিজের বাম এবং পালাক্রমে তাদের কিছু লিঙ্ক হ্রাস, quicklink । ¡বিশেষত এক বা দুটি লিঙ্ক গ্রহণ করে।

  • <F:monad|dyad><N:any>লিঙ্কটি এন কল করে , আর ফিরে আসে এবং এফ চালায় মোট আর বার ।

  • <nilad|missing><F:monad|dyad>সেট r গত কম্যান্ড-লাইন যুক্তি (বা তাদের অনুপস্থিতিতে stdin থেকে একটি ইনপুট) এবং, executes থেকে এফ মোট r বার কার্যকর করে।

যেহেতু 1নীলাদ (তর্ক ছাড়াই একটি লিঙ্ক), দ্বিতীয় ক্ষেত্রে প্রযোজ্য, এবং n বার +¡কার্যকর হবে (একটি অ-পূর্ণসংখ্যার যুক্তিটি গোল করে দেওয়া হবে)। প্রতিটি কল করার পরে , দ্রুত লিঙ্কের বাম আর্গুমেন্টটি রিটার্ন মান এবং বাম আর্গুমেন্টের পূর্ববর্তী মানের সাথে ডান আর্গুমেন্ট প্রতিস্থাপন করা হয়।+ +

পুরো প্রোগ্রাম হিসাবে, Ḟইনপুট মেঝে, ফলন এন ; তারপরে _ইনপুট থেকে ফলাফলটি বিয়োগ করুন, ** x ফলন হবে যা প্রত্যাবর্তনের মান হয়ে যায়।

1+¡তারপরে কল করুন +¡- পূর্বে বর্ণিত হিসাবে - বাম আর্গুমেন্ট 1 = f (0 + x) এবং ডান আর্গুমেন্ট x = f (-1 + x) দিয়ে , যা পছন্দসই আউটপুটটি গণনা করে।


আহ, +¡ফিবোনাচি চ্যালেঞ্জগুলির জন্য কতটা কার্যকর । ¡ডায়াডসের সাথে ফাইবোনাকির মতো কাজ করা কি উদ্দেশ্যমূলক ছিল ?
— এরিক আউটগল্ফার

Oooh - %1+¡: মধ্যে রৈখিক ক্ষেপক এন × এফ (ঢ) এ এন এবং N × এফ (ঢ -1) + + এফ (ঢ) এ এন-ε এবং তাদের মধ্যবর্তী বাড়ানো এন-ε এবং এন ।
— জোনাথন অ্যালান

পছন্দ করুন যেহেতু জেলির ভেরিয়েবল নেই, তাই আপনি আগের সিকোয়েন্সের সদস্যদের অ্যাক্সেস হারাবেন অন্যথায়, তাই এটি এটি এর মতো বাস্তবায়িত করার জন্য বোধগম্য হয়েছিল।
— ডেনিস

@ জোনাথান অ্যালান আমি নিশ্চিত যে আমি বুঝতে পেরেছি না। কী %1+¡করার কথা?
— ডেনিস

@Dennis Erm, বোঝানো , ভাল \ _o_ / ... কিন্তু এটি পরীক্ষা না প্রদর্শিত হবে কি: ডি
— জনাথন অ্যালান

5

গণিত, 32 বাইট

If[#<2,1~Max~#,#0[#-1]+#0[#-2]]&

খাঁটি ফাংশন ইনপুট হিসাবে একটি nonnegative আসল নম্বর গ্রহণ এবং একটি আসল নম্বর ফিরে। যদি 1~Max~#এটি দ্বারা প্রতিস্থাপন করা হয় 1, এটি পূর্ণসংখ্যার আর্গুমেন্টের জন্য 0-ইনডেক্সেড ফিবোনাচি সংখ্যাগুলির স্ট্যান্ডার্ড পুনরাবৃত্ত সংজ্ঞা হবে। তবে 1~Max~#0 এবং 2 এর মধ্যে আসল ইনপুটগুলির জন্য সঠিক টুকরোচক লিনিয়ার ফাংশন এবং পুনরাবৃত্তিটি বাকীগুলির যত্ন নেয়। (তুচ্ছ বস্তু বিষয়: 1-সূচীবদ্ধ ফিবানচি নম্বরে পরিবর্তন পরিবর্তন করে কেবল এটি করা সম্ভব Maxএকটি থেকে Min!)

বিল্টিনের সাথে আমি যে সংক্ষিপ্ততমটি পেতে পারি তা হ'ল 37-বাইট (b=Fibonacci)[i=Floor@#](#-i)+b[i+1]&।



3

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

f=x=>x<1?1:x<2?x:f(x-1)+f(x-2)
<input type=number value=2.4 oninput="O.value=f(value)"> <input id=O value=2.4 disabled>

শূন্য-সূচকযুক্ত পুনরাবৃত্তিমূলক ফিবোনাচি সিকোয়েন্স সংজ্ঞাটির তুচ্ছ পরিবর্তন। কিছু ইনপুটগুলির জন্য সামান্য বৃত্তাকার ত্রুটি দিতে পারে।


এই চালাক। আমি ভেবেছিলাম এটি কাজ করে না।
— লিকি নুন

1

জেলি , 17 12 বাইট

’Ñ+Ñ
’»0‘ÇỊ?

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

অ-বিল্টিন সমাধান।

ব্যাখ্যা

সহায়ক ফাংশন 1Ŀ

’Ñ+Ñ
 Ñ    Call the main program on
’       {the input} - 1;
   Ñ  Call the main program on {the input};
  +   Add those results{and return the result}

মূল প্রোগ্রাম

’»0‘ÇỊ?
’        Subtract 1
 »0      but replace negative results with 0
     Ị?  If the result is less than or equal to 1
   ‘     Return the result plus 1
    Ç    else return the result

0 থেকে 1 ব্যাপ্তির একটি ইনপুট অতএব 0 টিতে পরিপূর্ণ-বিয়োগ করবে, সুতরাং আমরা F (0) = F (1) = 1 পেতে 1 যুক্ত করব। 1 থেকে 2 ব্যাপ্তির একটি ইনপুট নিজেই ফিরে আসবে। এই বেস কেসগুলি একটি সাধারণ ফিবোনাচি পুনরাবৃত্তি করতে এবং সেখান থেকে অন্যান্য মানগুলি গণনা করার জন্য যথেষ্ট।


1

এক্সেল, 137 124 119 113 102 97 বাইট

পুনরাবৃত্ত / পুনরুক্তি পদ্ধতি (সরাসরি নবম পদগুলি গণনা করুন) এটি ওয়ান-ইনডেক্স পদ্ধতিটি ব্যবহার করে । যোগ করার পদ্ধতি +1থেকে =TRUNC(B1)-ইন্ডেক্স শূন্য থেকে এটি পরিবর্তন।

=A7+(A8-A7)*MOD(B1,1)
=5^.5
=(1+A2)/2
=TRUNC(B1)
=A4+1
=-1/A3
=(A3^A4-A6^A4)/A2
=(A3^A5-A6^A5)/A2

কোড স্নিপেটটি ঘর এ 1 থেকে শুরু করে স্থাপনের উদ্দেশ্যে ।

ইনপুট সেলটি বি 1 । আউটপুট সেল এ 1 ।


1

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

রাউন্ডিং নিয়ে কয়েকটি সমস্যা রয়েছে

n=>(i=(g=(z,x=1,y=0)=>z?g(--z,x+y,x):y)(++n|0))+n%1*(g(++n|0)-i)

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

f=
n=>(i=(g=(z,x=1,y=0)=>z?g(--z,x+y,x):y)(++n|0))+n%1*(g(++n|0)-i)
console.log(f(2.4))
console.log(f(6.35))
console.log(f(42.42))



0

জেলি , 13 9 বাইট

,‘ḞÆḞḅ%1$

এটি চ্যালেঞ্জের অনুমান হিসাবে একই সূচক ব্যবহার করে।

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

পটভূমি

অনুমান অনুসারে, আমাদের কাছে প্রাকৃতিক এন এবং 0 ≤ x <1 এর জন্য এফ (এন + এক্স) = এফ (এন) + (এফ (এন + 1) - এফ (এন)) এক্স রয়েছে । যেহেতু এফ (এন + 1) = এফ (এন) + এফ (এন - 1) , এটি এফ (এন + এক্স) = এফ (এন) + এফ (এন - 1) এক্স হিসাবে আবার লেখা যেতে পারে ।

তদ্ব্যতীত, চ্যালেঞ্জের নির্দিষ্ট ক্ষেত্রে ব্যবহৃত সূচকটি একটি ফাংশনকে f (n) = F (n + 1) সংজ্ঞায়িত করে (যেখানে F স্বাভাবিক ফিবোনাচি ফাংশন, যেমন, এফ (0) = 0 ), সুতরাং আমরা সূত্রটি পাই f (n + X) = এফ (ঢ + 1 টি) + + এফ (ঢ) এক্স ।

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

,‘ḞÆḞḅ%1$  Main link. Argument: n + x

 ‘         Increment; yield n + 1 + x.
,          Pair; yield [n + x, n + 1 + x].
  Ḟ        Floor; yield [n, n + 1].
   ÆḞ      Fibonacci; yield [F(n), F(n + 1)].
      %1$  Modulus 1; yield (n + x) % 1 = x.
     ḅ     Unbase; yield F(n)x + F(n + 1).

0

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

48

{$/=(1,1,*+*...*)[$_,$_+1];$0+($_-.Int)*($1-$0)}

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

38

sub f(\n){3>n??max 1,n!!f(n-1)+f(n-2)}

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

সম্প্রসারিত:

48

{
  $/ =          # store here so we can use $0 and $1
  (
    1,1,*+*...* # Fibonacci sequence
  )[
    $_,         # get the value by using floor of the input
    $_ + 1      # and get the next value
  ];

    $0            # the first value from above
  +
    ( $_ - .Int ) # the fractional part of the input
  *
    ( $1 - $0 )   # the difference between the two values in the sequence
}

( $0এবং $1এর সংক্ষিপ্ত রূপ $/[0]এবং$/[1] )

38

sub f (\n) {
    3 > n           # if n is below 3
  ??
    max 1, n        # return it if it is above 1, or return 1
                    # if it was below 1, the answer would be 1
                    # the result for numbers between 1 and 3
                    # would be the same as the input anyway
  !!
    f(n-1) + f(n-2) # the recursive way to get a fibonacci number
}

এটি অন্যান্য পাইথন এবং জাভাস্ক্রিপ্ট সমাধান দ্বারা অনুপ্রাণিত হয়েছিল


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.