বিকল্প ফিবোনাচি


17

বিকল্প ফিবোনাচি ক্রম, আপনি প্রথমে 1এবং 1যথারীতি শুরু করুন।

যাইহোক, পরবর্তী নম্বর পেতে সর্বদা শেষ দুটি মান যুক্ত করার পরিবর্তে আপনি বিকল্প যুক্ত করে শুরু করে এবং প্রতিবার পরিবর্তে আপনি বিয়োগ করেন।

ক্রমটি এভাবে শুরু হয়:

1
1
2    # 1 + 1
-1   # 1 - 2
1    # 2 + -1
-2   # -1 - 1
-1   # 1 + -2
-1   # -2 - -1
-2   # -1 + -1
1    # -1 - -2
-1   # -2 + 1
2    # 1 - -1
1    # -1 + 2
1    # 2 - 1

প্রভৃতি

লক্ষ্য করুন যে এটি একবার শুরু হয়ে যাওয়ার পরে এটি একবার 1এবং একবারে 1ফিরে আসে।

একটি নম্বর এন দেওয়া হয়েছে , বিকল্প ফাইবোনাকি অনুক্রমের N ম পদটি মুদ্রণ করুন ।

মনে রাখবেন, এটি , তাই সর্বনিম্ন সংখ্যক বাইট বিজয়ী কোড।


সিকোয়েন্সটি 0-ইনডেক্সড বা 1-ইনডেক্সড (বা হয় একটি)?
ডুরকনব

পছন্দ করুন আপনার উত্তরে উল্লেখ করুন।
অলিভার নি

আমরা কি trueজন্য ফিরে আসতে পারি 1?
ইটিএইচ প্রডাকশনস

প্রথম দুটি 1মান আউটপুটটির জন্য প্রাথমিক মান হিসাবে গণনা করে? বা আমরা সরাসরি দিয়ে শুরু করব 2?
লুইস মেন্ডো

@ লুইস মেন্ডো প্রথম দুটি গণনা।
অলিভার নি

উত্তর:


17

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

n=>"334130110314"[n%12]-2

0-ইন্ডেক্স। আপনি কিছুটা পুনরাবৃত্ত সংস্করণ দিয়ে স্ট্রিংটি সংক্ষিপ্ত করতে পারেন, যদিও এটিতে 6 বাইট যুক্ত করা হয়েছে:

f=n=>"3341301"[n]-2||f(13-n%12)

এটি এখনও চূড়ান্ত পুনরাবৃত্তির সূত্রের চেয়ে ছোট:

f=n=>n<2||f(n-2)+f(n-1)*(-n%2|1)

8

পাইথন, 31 বাইট

lambda n:2-33107256/5**(n%12)%5

মান গণনা করার চেষ্টা করে বিরক্ত করে না। পেরিওডিক দৈর্ঘ্য -12 তালিকায় সন্ধান করুন [1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2], যা বেস 5 তে সংক্ষেপিত ।

True1 এর জন্য একটি পুনরাবৃত্ত সমাধান (37 বাইট) এর সাথে তুলনা করুন :

f=lambda n:n<2or(-1)**n*f(n-1)+f(n-2)

বা স্ট্রিং স্টোরেজ

lambda n:int('334130110314'[n%12])-2

বা একটি গাণিতিক এক্সপ্রেশন চেষ্টা।

lambda n:4**n%7%3*(-1)**((n+n%2*4)/6)

7

ওসিস , 10 বাইট

আমাকে আরও কিছু বিল্ট-ইনগুলি বাস্তবায়নের জন্য মনে করিয়ে দেয়: পি। ইনপুটটি 0-সূচকযুক্ত

কোড:

n>2%x<*c+V

অনুবাদিত সংস্করণ:

a(n) = (2*((n+1)%2)-1) * a(n-1) + a(n-2)
a(1) = 1
a(0) = 1

এবং n ম পদটি গণনা করে ।

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




4

জেলি, 12 বাইট

“½Ġ⁻S’b5_2⁸ị

TryItOnline!

1-ভিত্তিক, প্রদত্ত প্রথম এবং দ্বিতীয় মানগুলি 1

এটি এখনও সংক্ষিপ্ত কিনা নিশ্চিত না, তবে এর জন্য আমি লক্ষ করেছি যে এই সিরিজটির সময়কাল 12:
[1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2]

সুতরাং, আমি এটি গ্রহণ করেছি এবং তারপরে যোগ 2করার
[3, 3, 4, 1, 3, 0, 1, 1, 0, 3, 1, 4]
পরে সেইটিকে একটি বেস 5নম্বর হিসাবে বেসে রূপান্তর করি 250: দিতে
[11, 197, 140, 84]
(যা 184222584)।

“½Ġ⁻S’b5_2⁸ị - Main link: n
“½Ġ⁻S’       - base 250 number      184222584
      b5     - convert to base 5   [3, 3, 4, 1, 3, 0, 1, 1, 0, 3, 1, 4]
        _2   - subtract 2          [1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2]
          ⁸  - left argument, n
           ị - index into (1-based and modular)

4

হাস্কেল, 33 26 বাইট

a!b=a:b:(a+b)!(-a)
(1!1!!)

পুনরাবৃত্তি পদ্ধতির। 0-ইন্ডেক্স। আইডিয়নে চেষ্টা করে দেখুন। এক্সনোরকে
ধন্যবাদ 7 বাইট সংরক্ষণ করা হয়েছে

ব্যবহার:

Prelude> (1!1!!)11
2

খালি দেখতে খুব কম লাগছে a!b=a:b:(a+b)!(-a)
xnor

3

গণিত, 40 বাইট

ETH প্রোডাকশনগুলির উত্তরের মতো কেবল একটি সন্ধানের টেবিল তৈরি করে এবং এটি চক্রাকারে অ্যাক্সেস করে। নামহীন ফাংশন, 1-সূচকযুক্ত।

Join[s={2,1,1,2,-1,1},-s][[#~Mod~12+1]]&

3

এমএটিএল , 17 16 15 বাইট

'"Bl)e'F5Za2-i)

ইনপুটটি 1-ভিত্তিক।

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

ব্যাখ্যা

ক্রমটির পিরিয়ড রয়েছে [1 1 2 -1 1 -2 -1 -1 -2 1 -1 2]

'"Bl)e     % Compressed array [1 1 2 -1 1 -2 -1 -1 -2 1 -1 2] with source 
           % alphabet [-2 -1 0 1 2]
F5Za       % Decompress with target alphabet [0 1 2 3 4]
2-         % Subtract 2 to transform alphabet into [-2 -1 0 1 2]
i)         % Input N and use as (modular, 1-based) index into the sequence

3

WinDbg, 26 বাইট

?(85824331b>>@$t0%c*3&7)-2

ইনপুট সিউডো-রেজিস্টার মাধ্যমে পাস করা হয় $t0। 0-ইন্ডেক্স। অনুক্রমের প্রতিটি পদটির +2 3 বিট তৈরিতে সংরক্ষণ করা হয় 85824331b

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

? (85824331b >> @$t0 % c * 3 & 7) - 2 ;*? Evalutes the expression. Shifts 85824331b to get
                                       *the 3 bits for the @$t0'th term (mod c (12) when
                                       *the sequence repeats). Bitwise AND by 7 to get the
                                       *desired 3 bits, finally subtract 2 since the terms
                                       *where stored as +2.

নমুনা আউটপুট, ক্রমের প্রথম 14 টি মান মুদ্রণ করে একটি লুপ:

0:000> .for(r$t0=0;@$t0<e;r$t0=@$t0+1){?(85824331b>>@$t0%c*3&7)-2}
Evaluate expression: 1 = 00000001
Evaluate expression: 1 = 00000001
Evaluate expression: 2 = 00000002
Evaluate expression: -1 = ffffffff
Evaluate expression: 1 = 00000001
Evaluate expression: -2 = fffffffe
Evaluate expression: -1 = ffffffff
Evaluate expression: -1 = ffffffff
Evaluate expression: -2 = fffffffe
Evaluate expression: 1 = 00000001
Evaluate expression: -1 = ffffffff
Evaluate expression: 2 = 00000002
Evaluate expression: 1 = 00000001
Evaluate expression: 1 = 00000001

3

জাভা, 32 বাইট

n->"334130110314".charAt(n%12)-50

যেহেতু এটি জাভা, উত্তরটি 0-ইনডেক্সড।

পরীক্ষা এবং নিরবচ্ছিন্ন:

class Ideone {
  public static void main (String[] args) throws Exception {
    java.util.function.IntFunction f = n->"334130110314".charAt(n%12)-50;
    for (int i = 0; i < 12; i++) {
      System.out.printf("%d -> %d%n", i, f.apply(i));
    }
  }
}

আইডিয়নে পরীক্ষা


2

গণিত, 45 41 38 বাইট

তিনটি বাইটের জন্য @ মার্টিনইেন্ডারকে ধন্যবাদ

±0=±1=1;±n_:=±(n-2)+±(n-1)(1-2n~Mod~2)

0-ইন্ডেক্স।

ব্যবহার

±5

-2


2
আপনি সম্ভবত ±একটি ফাংশন পরিবর্তে একটি unary অপারেটর সংজ্ঞায়িত দ্বারা তিনটি বাইট সংরক্ষণ করতে পারেন a
মার্টিন ইন্ডার


1

সি #, 117 বাইট

Golfed:

int A(int n){var f=new List<int>{0,1,1};for(int i=3;i<=n;i++){f.Add(i%2>0?f[i-1]+f[i-2]:f[i-2]-f[i-1]);}return f[n];}

Ungolfed:

public int A(int n)
{
  var f = new List<int> { 0, 1, 1 };

  for (int i = 3; i <= n; i++)
  {
    f.Add(i % 2 > 0 ? f[i - 1] + f[i - 2] : f[i - 2] - f[i - 1]);
  }

  return f[n];
}

পরীক্ষামূলক:

var alternatingFibonacci = new AlternatingFibonacci();
Console.WriteLine(alternatingFibonacci.B(10));
1

কম্পাইল একটি Func <int- এ, int-> তাই public int A(int n)এখন n=>, আপনি বিবৃতি 2 বাইট সংরক্ষণের জন্য প্রায় ধনুর্বন্ধনী অপসারণ করতে পারেন, আপনি বৃদ্ধি প্রাক পারেন iলুপ অর্থাত ++i <= nএবং সেট i = 23 বাইট সংরক্ষণ করা হয়েছে কারণ এটি সরিয়ে ফেলা i++বিবৃতি শেষে
TheLethalCoder


1

আর, 38 বাইট

@Ethproductions জেএস উত্তর দ্বারা অনুপ্রাণিত অনুসন্ধান সারণী সমাধান ব্যবহার করে।

c(s<-c(2,1,1,2,-1,1),-s)[scan()%%12+1]

সম্পাদনা করুন: এটি 1 সূচকযুক্ত তা ভুলে গেছেন।



1

জাভা 7, 88 82 79 বাইট

golfed:

int f(int n){int c,i=0,a=1,b=1;for(;i<n;){c=i++%2>0?a-b:a+b;a=b;b=c;}return b;}

ungolfed:

int f(int n)
{
    int c, i = 0, a = 1, b = 1;
    for (; i < n;)
    {
        c = i++ % 2 > 0 ? a - b : a + b;
        a = b;
        b = c;
    }
    return b;
}

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


1
আপনি যেহেতু "যৌক্তিক" পথে চলেছেন তাই এখানে কিছু ইঙ্গিত দেওয়া হল: ১. আপনি intরিটার্নের ধরণ হিসাবে ঘোষণা করতে ভুলে গেছেন । 2. আপনি 0: এর অ্যাসাইনমেন্টটি i: int c,i=0এবং এর ঘোষণায় স্থানান্তরিত করে বাইটগুলি ছাড়তে পারবেন for(;i<n;){। ৩. আপনি টার্নারি অপারেটরের শর্তের আশেপাশে প্রথম বন্ধনী সরাতে পারেন।
অলিভিয়ার গ্রাগোয়ার

1
@ অলিভিগ্রগ্রোওরে ধন্যবাদ ড্যাড :) স্থির হয়েছে। সুন্দর সমাধান
বিটিডব্লিউ

1

ডিসি, 55 বাইট

?sd[ln1+snly[[+2Q]sEln2%1=E-]xlyrsylnld>r]sr1sy0sn1lrxp

0-ইন্ডেক্স।

?sd                                                     takes input and stores
                                                        it in register d

                                            1sy0sn1     stores 1 in register y
                                                        and 0 in register n and
                                                        appends 1 to the stack

   [ln1+snly                                            adds 1 to register n and
                                                        appends the value of
                                                        register y to the stack

            [[+2Q]sEln2%1=E-]                           adds or subtracts the
                                                        the two values on the
                                                        stack depending on
                                                        parity of n

                             xlyrsylnld>r]              does the rest of the
                                                        stuff required to store
                                                        the new values properly
                                                        and quits if it has
                                                        done enough iterations

                                          sr            stores the main macro
                                                        in register r

                                                   lrxp executes the macro and
                                                        prints the stack

রেজিস্টার ডি মান সূচক সঞ্চয়। নিবন্ধভুক্ত এন সম্পূর্ণ হওয়া পুনরাবৃত্তির সংখ্যা গণনা করে। প্রধান ম্যাক্রো আর স্টোর নিবন্ধন করুন। ক্রমিকের পরবর্তী মানটি রেজিস্ট্রি করে রাখুন, যখন স্ট্যাকটিতে ক্রমের আগের মান থাকে।

বড় লুপটিতে কী চলছে এর ভিজ্যুয়াল ব্যাখ্যা (সংযোজন ধরে ধরে):

register: y=1     y=1   y=1    y=1   y=1    y=2
stack:     1      1 1    2     2 1   1 2     1
               ly     +     ly     r     sy

যোগ বা বিয়োগ করতে হবে কিনা তা নির্ধারণের জন্য চেকটি কাউন্টার মডুলো দুটি গ্রহণ করে এবং অন্যটি নির্মাণের জন্য এই কৌশলটি ব্যবহার করে ।

শেষে স্ট্যাকটিতে একটি একক সংখ্যা, পছন্দসই মান রয়েছে যা দিয়ে মুদ্রিত হয় p

(আমি এতে নতুন dc, তাই আমি আশা করব যে এখানে কিছু সুস্পষ্ট উন্নতি হবে।)



0

টার্টলিড , 35 বাইট

#112-1_--_1-2#?:[*l+].(-r'1)(_"-2")

0 সূচকযুক্ত

ব্যাখ্যা:

#112-1_--_1-2#                      the 12 values of sequence. - is -1, _ is -2
              ?:                    input a number and move right that many
                [*l+]               move back to the asterisk on start cell, 
                                    increment sting pointer by amount moved
                     .              write pointed char
                      (-r'1)        if it was -, move right, write 1
                            (_"-2") if it was _, write "-2"
      [print grid]

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


0

এবিসিআর, 43 বাইট

)AAB)ABB..A))A..A)AA(ABB.)A+A)))AiB5aAb(Bxo

ব্যাখ্যা: প্রথম অংশ ( )AAB)ABB..A))A..A)AA(ABB.)A+A)))A) এ [1, 1, 2, -1, 1, -2, -1, -1, -1, -2, 1, -1, 2] ধারণ করার জন্য A সারি স্থাপন করে । iBআমাদের কাঙ্ক্ষিত পদটি এবং 5aAb(Bxকাতারে লুপ চক্রগুলি বহুবার সঞ্চয় করে। oএকটি সংখ্যা হিসাবে কাতারের সামনের অংশ মুদ্রণ করে, যা তখন আমাদের পছন্দসই উত্তর হবে।


0

ব্যাচ, 49 বাইট

@cmd/cset/a"n=%1%%12,~!(n%%3)*(1|-!(n%%5*(n/4)))"

কমান্ড-লাইন প্যারামিটার হিসাবে ইনপুট নেয়। ব্যাখ্যা: বন্ধ ফর্মটি নিম্নলিখিত পর্যবেক্ষণগুলি ব্যবহার করে:

  • সিকোয়েন্স 12 সময়কাল সহ চক্রীয়
  • প্রতি তৃতীয় শব্দটি ± 2 হয় অন্য শর্তগুলি হয় ± 1
  • তৃতীয়টির পরে শর্তাদি 5 এর গুণক ব্যতীত নেতিবাচক (মডুলো 12 হ্রাস করার পরে)

আমরা অতএব মডুলো 12 (2 বাইট সংরক্ষণ করতে) হ্রাস করে শুরু করি। তারপরে আমরা তিনটি মডুলো হ্রাস করি এবং ফলাফলটি উল্টে দেব, যা অন্যথায় 3 বা 0 এর গুণকের জন্য 1। আমরা তখন সেই মানটিকে কিছুটা হলেও না করে অন্যথায় 3 বা -1 এর গুণকের জন্য -2 দিই। এরপরে আমরা মডুলো 5 হ্রাস করি এবং 1, 2, 3, 5, 10 এবং 12 (0) পদগুলির শূন্য প্রদান করে 4 দিয়ে আলাদাভাবে বিভাজন করি। উল্টানো এবং অবহেলা আমাদেরকে সেই মানগুলির জন্য -1 এবং অন্যান্য মানের জন্য শূন্য দেয়। তারপরে আমরা বিটওয়াইস বা এটি 1 দিয়ে এবং পূর্বের গণনার সাথে গুণ করি।


0

টিআই-বেসিক, 26 বাইট

দুর্ভাগ্যক্রমে, খুব উদ্বেগজনক পদ্ধতির। আমি ছোট কিছু খুঁজে পাইনি। তালিকাটি 1-সূচকযুক্ত।

Input :{1,1,2,-1,1,-2:augment(Ans,-Ans:Ans(X

0

সি #, 73 71 বাইট

এটি 0 এর সূচকযুক্ত এন ব্যবহার করে।

n=>{int a=1,b=1,i=0,r;for(;++i<n;){r=i%2>0?a+b:a-b;a=b;b=r;}return b;};

ফর্ম্যাট সংস্করণ:

Func<int, int> f = n =>
{
    int a = 1, b = 1, i = 0, r;

    for(; ++i < n;)
    {
        r = i % 2 > 0 ? a + b : a - b;
        a = b;
        b = r;
    }

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