ডিজিটাল সাম ফিবোনাচি


30

আমরা সকলেই ফিবোনাচি অনুক্রমের সাথে পরিচিত :

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765

তবে এর পরিবর্তে, f(n) = f(n-1) + f(n-2)আমরা আগের 2 টি এন্ট্রিগুলির ডিজিটাল যোগফল গ্রহণ করব ।


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

f(0)  = 0
f(1)  = 1
f(2)  = 1   # 0 + 1
f(3)  = 2   # 1 + 1
f(4)  = 3   # 1 + 2
f(5)  = 5   # 2 + 3
f(6)  = 8   # 3 + 5
f(7)  = 13  # 8 + 5
f(8)  = 12  # 8 + 1 + 3
f(9)  = 7   # 1 + 3 + 1 + 2
f(10) = 10  # 1 + 2 + 7
f(11) = 8   # 7 + 1 + 0
f(12) = 9   # 1 + 0 + 8
f(13) = 17  # 8 + 9
f(14) = 17  # 9 + 1 + 7
f(15) = 16  # 1 + 7 + 1 + 7
f(16) = 15  # 1 + 7 + 1 + 6
f(17) = 13  # 1 + 6 + 1 + 5
f(18) = 10  # 1 + 5 + 1 + 3
f(19) = 5   # 1 + 3 + 1 + 0
f(20) = 6   # 1 + 0 + 5
f(21) = 11  # 5 + 6
f(22) = 8   # 6 + 1 + 1
f(23) = 10  # 1 + 1 + 8
f(24) = 9   # 8 + 1 + 0
f(25) = 10  # 1 + 0 + 9
f(26) = 10  # 9 + 1 + 0
f(27) = 2   # 1 + 0 + 1 + 0
(After this point it repeats at the 3rd term, 0-indexed)

দ্রষ্টব্য: আমি নিজেই চ্যালেঞ্জটি পোস্ট না করা পর্যন্ত পুনরাবৃত্তিটি লক্ষ্য করিনি এবং এখানে আমি ভাবছিলাম যে অন্য একটি উপন্যাস ফিবোনাচি চ্যালেঞ্জ লেখা অসম্ভব হবে।


আপনার টাস্কটি, একটি নম্বর দেওয়া হয়, nএই ক্রমের নবম অঙ্ক আউটপুট দেয়।

প্রথম 3 সংখ্যার: [0,1,1],

24-সংখ্যার পুনরাবৃত্তি প্যাটার্ন: [2,3,5,8,13,12,7,10,8,9,17,17,16,15,13,10,5,6,11,8,10,9,10,10]

ইঙ্গিত: আপনি এই পুনরাবৃত্তিটি আপনার সুবিধার্থে কাজে লাগাতে পারবেন।


এটি , সর্বনিম্ন বাইট-কাউন্টটি বিজয়ী।


বোনাস: আপনি যদি নিজের উত্তরে পুনরাবৃত্তিটি ব্যবহার করেন তবে আমি সর্বনিম্ন বাইট-কাউন্ট উত্তরটি প্রদান করব যা ক্রমের পুনরাবৃত্তির সুবিধা গ্রহণ করবে 100 পয়েন্টের অনুদান। এটি আপনার আসল উত্তরের অংশ হিসাবে আপনার মূল উত্তরের পরে জমা দেওয়া উচিত। আমি যা বলছি তার উদাহরণ হিসাবে এই পোস্টটি দেখুন: https://codegolf.stackexchange.com/a/108972/59376

এই বোনাসের জন্য যোগ্যতা অর্জনের জন্য আপনার কোডটি অবশ্যই O(1)একটি ব্যাখ্যা সহ ধ্রুব সময়ে ( ) চালানো উচিত ।

বোনাস বিজয়ী: ডেনিস https://codegolf.stackexchange.com/a/108967/59376 <ডেনিস জিতেছে।

সর্বাধিক অনন্য বাস্তবায়ন: https://codegolf.stackexchange.com/a/108970/59376
(সঠিক উত্তর নির্বাচনের পরে চূড়ান্ত করা 100 পয়েন্টও পাবেন)


2
আমরা কি 1-ভিত্তিক সূচক ব্যবহার করতে পারি বা এটি 0-ভিত্তিক হতে হবে?
বিড়াল বিড়াল

1
@ বিজনেসগেট হ্যাঁ, অবশ্যই এটি স্ক্রু করুন।
ম্যাজিক অক্টোপাস উরন 21

1
আপনি কিভাবে সংজ্ঞা দিন যে পুনরাবৃত্তির সুবিধা নেয় ? এটি কি হার্ডকোড করতে হবে বা আমি %24একটি "সাধারণ" সমাধানটিতে কেবল একটি যুক্ত করব ?
ডেনিস 21

1
@ ডেনিস আমি পুনরাবৃত্তিটি বোঝাতে চাইলে সুবিধাটি গ্রহণ করছি O(1) । যদি আপনার কোডটি সত্যিকার অর্থে পুনরাবৃত্তিটি কাজে লাগায় তবে ধ্রুব সময়ে চলতে হবে।
ম্যাজিক অক্টোপাস উরন 21

1
ইনপুটটিতে ডেনিস টেকনিক্যালি% 24 এটিকে 27 টি পুনরাবৃত্তিতে উপরের সীমানায় পরিণত করবে; যদিও আকর্ষণীয় নয়, এটি অবশ্যই গণনা করে।
যাদু অক্টোপাস উরন 21

উত্তর:


7

ওসিস , 5 বাইট

কোড:

ScS+T

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

প্রসারিত সংস্করণ:

ScS+10

ব্যাখ্যা:

ScS+   = a(n)
     0 = a(0)
    1  = a(1)
S      # Sum of digits on a(n-1)
 c     # Compute a(n-2)
  S    # Sum of digits
   +   # Add together

ওহ মানুষ ... আমি ওএসিসকেও শিখতে শুরু করব।
ম্যাজিক অক্টোপাস উরন

28

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

f=(n,x=0,y=1)=>n?f(n-1,y,(x%9||x)+(y%9||y)):x
<input type=number min=0 oninput=o.textContent=f(this.value)><pre id=o>

xএবং yউভয়ই হতে পারে না 9, যেহেতু এর জন্য আগের সংখ্যাটি হওয়া দরকার 0, তাই তাদের ডিজিটাল যোগফল অতিক্রম করতে পারে না 17। এর অর্থ হ'ল বৃহত্তর সংখ্যার জন্য ডিজিটাল রুট 9বাকি মডিউলগুলির মতো 9


6
এটি, এটি পুনরাবৃত্তি নেতার সমতুল্য একটি অনুগ্রহও পাবেন ... এটি একটি দুর্দান্ত গাণিতিক অন্তর্দৃষ্টি।
ম্যাজিক অক্টোপাস আরন 21

13

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

f=lambda n:n>1and sum(map(int,`f(n-1)`+`f(n-2)`))or n

পুনরাবৃত্তি ফাংশন। এর বেস কেসগুলি n=0এবং n=1ফলন n, বৃহত্তর সংখ্যাগুলি কল করে f(n-1)এবং f(n-2)একটি স্ট্রিংয়ে রূপান্তর করে, দুটি স্ট্রিংকে যুক্ত করে প্রতিটি অক্ষরকে একটি পূর্ণসংখ্যায় রূপান্তর করে মানকে গণনা mapকরেint ফাংশন, এবং তারপর ফলে তালিকা অঙ্কের।


Modulo-24 তথ্য ব্যবহার করে আমি বর্তমানে একটি 56 বাইট নন-রিকার্সিভ নামহীন ফাংশনটি পেতে পারি:

lambda n:int(('011'+'2358dc7a89hhgfda56b8a9aa'*n)[n],18)

1
হ্যাঁ! এত +1! একটি পুনরাবৃত্তি উত্তর :)। আমি আপনার সম্মান স্যার একটি বোনাস বিভাগ যুক্ত করেছি, আপনি এখন একটি 100 পয়েন্ট অনুগ্রহ প্রতিযোগিতায় শীর্ষস্থানীয়!
ম্যাজিক অক্টোপাস আরন 21

11

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

f=n=>n<2?n:~-f(--n)%9+~-f(--n)%9+2

আপনার ব্রাউজারটি 27 বা ততোধিকের ইনপুটগুলির জন্য হিমশীতল করতে পারে তবে এটি সমস্ত ইনপুট মানগুলির জন্য কাজ করে। এটি সাধারণ ক্যাশে যাচাই করা যেতে পারে:

c=[];f=n=>n<2?n:c[n]=c[n]||~-f(--n)%9+~-f(--n)%9+2
<input type=number value=0 min=0 step=1 oninput="O.value=f(this.value)"> <input id=O value=0 disabled>

নীলের উজ্জ্বল উত্তরে নির্দেশিত হিসাবে , আউটপুট কখনই 17 এর বেশি হতে পারে না, সুতরাং 9 এর উপরে যে কোনও আউটপুটটির ডিজিটাল যোগফল সমান n%9। এটি 9 এর নিচে আউটপুটগুলির সাথেও কাজ করে; আমরা 9 ​​টির জন্য কাজ করতে পারি পাশাপাশি ~-মডুলাসের আগে 1 টি বিয়োগ করে , পরে 1-এ যোগ করে।


হার্ডকোডিংয়ের সাথে আমি যেটা করতে পারি তা হ'ল 50 বাইট:

n=>"0x"+"7880136ba5867ffedb834968"[n%24]-(n<3)*9+2

6

জেলি , 8 বাইট

;DFS
ç¡1

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

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

ç¡1   Main link. No arguments. Implicit left argument: 0

  1   Set the right argument to 1.
ç¡    Repeatedly execute the helper link n times – where n is an integer read from
      STDIN – updating the left argument with the return value and the right
      argument with the previous value of the left argument. Yield the last result.


;DFS  Helper link. Arguments: a, b

;     Concatenate; yield [a, b].
 D    Decimal; convert both a and b to their base-10 digit arrays.
  F   Flatten the result.
   S  Compute the sum of the digits.

বিকল্প সমাধান, 19 বাইট, ধ্রুবক সময়

;DFS
9⁵ç23С⁸ịµṠ>?2

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

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

9⁵ç23С⁸ịµṠ>?2  Main link. Argument: n

9               Set the return value to 9
 ⁵              Yield 10.
  ç23С         Execute the helper link 23 times, with initial left argument 10
                and initial right argument 9, updating the arguments as before.
                Yield all intermediate results, returning
                [10,10,2,3,5,8,13,12,7,10,8,9,17,17,16,15,13,10,5,6,11,8,10,9].
   ⁸ị           Extract the element at index n. Indexing is 1-based and modular.
     µ          Combine all links to the left into a chain.
       >?2      If n > 2, execute the chain.
      Ṡ         Else, yield the sign if n.

1
চুজ্জ্পের জন্য +1 "আসুন কেবল ধ্রুব সময়ে পুরো পুনরাবৃত্তি বিভাগটি গণনা করুন": ডি
ফেলিক্স ডমব্যাক

4

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

_=$=>$<2?$:eval([..._(--$)+[_(--$)]].join`+`)

ব্যবহার

_=$=>$<2?$:eval([..._(--$)+[_(--$)]].join`+`)
_(7)

আউটপুট

13

ব্যাখ্যা

এই ফাংশনটি পরীক্ষা করে যে ইনপুটটি 2 টির চেয়ে কম ছোট এবং যদি তাই হয় তবে এটি ইনপুটটি ফেরত দেয়। অন্যথায়, এটি দুটি মানের একটি অ্যারে তৈরি করে যা একে অপরের সাথে স্ট্রিং হিসাবে যুক্ত হয়। ঐ দুটি মান ফাংশন কলিং ফল input - 1এবংinput - 2

...অপারেটর অক্ষর, যা পরে আবার একটি স্ট্রিং রূপান্তর করা হয় একটি অ্যারের মধ্যে এই স্ট্রিং splits, কিন্তু এখন সঙ্গে+ মানের মধ্যে স্প্যানিশ ভাষায়। এই স্ট্রিংটি তখন কোড হিসাবে ব্যাখ্যা করা হয়, সুতরাং যোগফল গণনা করা হয়, যা পরে ফিরে আসে।

এটি একটি দ্বৈত-পুনরাবৃত্তির অ্যালগরিদম যা এটি একেবারেই অকার্যকর করে তোলে। এটি n-2ইনপুট জন্য 2 ফাংশন কল প্রয়োজন n। যেমন, এখানে একটি দীর্ঘ কিন্তু দ্রুত সমাধান। এটি নিয়ে আসার জন্য ইটিএইচ প্রডাকশনসকে ধন্যবাদ।

f=($,p=1,c=0)=>$?f($-1,c,eval([...p+[c]].join`+`)):c

এটি 27 এর মতো বড় মানের জন্য কাজ করে না, এটি ব্রাউজারকে
হিমশীতল

এটি কিছুটা সময় নেয়, তবে এটি সেখানে উপস্থিত হবে ... অবশেষে। আমি এটি খতিয়ে দেখব, তবে এই চ্যালেঞ্জের জন্য পারফরম্যান্স গুরুত্বপূর্ণ নয় ...
লুক

হ্যাঁ, যীশু, এটি গণনার দিক থেকে তীব্র নয়, আপনার প্রোগ্রামটি ২ 27 এর বাইরে মানগুলির জন্য কাজ করা উচিত ... তবে যদি এটি 1-28 এর জন্য কাজ করে তবে প্রযুক্তিগতভাবে প্রমাণিত হয় যে এটি উচ্চতর ক্ষেত্রে কাজ করে।
ম্যাজিক অক্টোপাস উরন

1
@ ক্রিতিক্সিলিথোস এটিই পুনরাবৃত্তি যা সমস্যা। কম্পিউটিং এন ক্রমানুসারে তম সংখ্যা প্রায় প্রয়োজন 2 ^ (এন-2) ফাংশন কল, যা প্রশংসনীয় দ্রুত গড়ে তোলে।
ইটিএইচ প্রডাকশনগুলি

আপনি এটি দিয়ে একটি বাইট সংরক্ষণ করতে পারেন [..._(--$)+[_(--$)]] :-) এর মাধ্যমে
ETH প্রোডাকশনগুলি


3

সিজেম, 22 20 বাইট

মার্টিন ইন্ডারকে ধন্যবাদ 2 বাইট সংরক্ষণ করা

ri2,{(_(jAb\jAb+:+}j

সোজা পুনরাবৃত্তির অ্যালগরিদম, অভিনব কিছু নয়। 0-ইন্ডেক্স।

এটি অনলাইন চেষ্টা করুন! অথবা 0-50 এর জন্য পরীক্ষা করুন (আসলে বেশ দ্রুত চলে)।

ব্যাখ্যা

ri                    Read an integer from input
  2,                  Push the array [0 1]
    {             }j  Recursive block, let's call it j(n), using the input as n and [0 1] as base cases
     (                 Decrement (n-1)
      _(               Duplicate and decrement again (n-2)
        jAb            Get the list digits of j(n-2)
           \           Swap the top two elements
            jAb        Get the list of digits of j(n-1)
               +       Concatenate the lists of digits
                :+     Sum the digits

সিজেম, 42 বাইট

পুনরাবৃত্তি ব্যবহার করে সমাধান। জোনাথন অ্যালান সমাধানের অনুরূপ অ্যালগরিদম।

ri_2,1+"[2358DC7A89HHGFDA56B8A9AA]"S*~@*+=

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


3

পার্ল 6 ,  41  37 বাইট

{(0,1,{[+] |$^a.comb,|$^b.comb}...*)[$_]}

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

{(0,1,*.comb.sum+*.comb.sum...*)[$_]}

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

{ # bare block lambda with implicit parameter 「$_」
  (

    0, 1,           # first two values

    # WhateverCode lambda with two parameters ( the two 「*」 )
    *.comb.sum      # digital sum of first parameter
    +
    *.comb.sum      # digital sum of second parameter

    ...            # keep using that code object to generate new values until:

    *              # never stop

  )[ $_ ]          # index into the sequence
}

1
আপনি অভ্যন্তরীণ ল্যাম্বদা হিসাবে লিখতে পারেন *.comb.sum+*.comb.sum
স্মাইলস

2

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

lOi:"yyhFYAss]&

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

lO       % Push 1, then 0. So the next generated terms will be 1, 1, 2,... 
i        % Input n
:"       % Repeat that many times
  yy     %   Duplicate top two elements in the stack
  h      %   Concatenate into length-2 horizontal vector
  FYA    %   Convert to decimal digits. Gives a 2-row matrix
  ss     %   Sum of all matrix entries
]        % End
&        % Specify that next function (display) will take only 1 input
         % Implicit display


2

সি, 96 বাইট

বা escape১ বাইটে প্রতি 1 টি বাইট হিসাবে এস্কেপ কোড গণনা করা হচ্ছে

0 সূচকযুক্ত। অন্যান্য জবাবগুলির মতো কিছুতে আমি মানগুলির একটি সারণী সূচী করছি তবে আমি এটিকে 4 বাইট খণ্ডে সংকুচিত করেছি। আমি মোড 24 সংস্করণটি তদন্ত করতে বিরক্ত করিনি কারণ আমি মনে করি না যে এটি ইতিমধ্যে আকর্ষণীয় ছিল যেহেতু অন্যরা ইতিমধ্যে এটি করেছে তবে আসুন এটির মুখোমুখি হোন, সি যাইহোক জিততে পারে না।

#define a(n) n<3?!!n:2+(15&"\x1\x36\xba\x58\x67\xff\xed\xb8\x34\x96\x87\x88"[(n-3)/2%12]>>n%2*4)

ব্যাখ্যা:

#define a(n)                                                                                     // using a preprocessor macro is shorter than defining a function
             n<3?!!n:                                                                            // when n is less than 3 !!n will give the series 0,1,1,1..., otherwise..
                                                                             (n-3)/2%12          // condition the input to correctly index the string...
                           "\x1\x36\xba\x58\x67\xff\xed\xb8\x34\x96\x87\x88"                     // which has the repeating part of the series encoded into 4 bits each number
                                                                                                 // these are encoded 2 less than what we want as all numbers in the series after the third are 2 <= a(n>2) <= 17 which conforms to 0 <= a(n>2) - 2 <= 15
                                                                                        >>n%2*4  // ensure the data is in the lower 4 bits by shifting it down, n%2 will give either 0 or 1, which is then multiplied by 4
                        15&                                                                      // mask those bits off
                     2+                                                                          // finally, add 2 to correct the numbers pulled from the string

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


আমি পালানোর কোডগুলি প্রতিটি 1 বাইট হিসাবে গণনা করি! দুর্দান্ত কাজ
অ্যালবার্ট রেনশওয়া

2

জাপট , 27 25 বাইট

U<2?U:~-ß´U %9+~-ß´U %9+2

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

ETH প্রডাকশনগুলির জন্য 2 বাইট সংরক্ষণ করা।


আরে, জাপট :-) ব্যবহারের জন্য ধন্যবাদ আপনি দুটি বাইট সংরক্ষণের ´জায়গায় ব্যবহার করতে পারেন --
ETH প্রোডাকশনস


2

গণিত, 49 বাইট

If[#<2,#,Tr[Join@@IntegerDigits[#0/@{#-1,#-2}]]]&

সোজা পুনরাবৃত্তি সংজ্ঞা। কিছুক্ষণ পরে বেশ ধীর হয়ে যায়।

গণিত, a৯ 71 বাইট

If[#<3,Sign@#,(9@@LetterNumber@"JJBCEHMLGJHIQQPOMJEFKHJ")[[#~Mod~24]]]&

পর্যায়ক্রমিক প্যাটার্নটিকে হার্ডকোডিং। বজ্রপাত দ্রুত এবং সন্তুষ্টিজনকভাবে গাণিতিকের কাছে আপত্তিজনক :) 8 বাইট সংরক্ষণের জন্য জংহওয়ান মিনকে ধন্যবাদ!


আপনার দ্বিতীয় কোডের LetterNumber@"JJBCEHMLGJHIQQPOMJEFKHJ"জন্য 8 বাইটের চেয়ে ছোট 43626804920391712116157158790~IntegerDigits~18
জংহওয়ান মিন

তুমি ঠিক বলছো! এই দিনগুলির একটি আমি স্মরণ করতে চলেছি LetterNumber....
গ্রেগ মার্টিন

1

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

সহজ পুনরাবৃত্তি সমাধান।

a,b=0,1
exec'a,b=b,(a%9or a)+(b%9or b);'*input()
print a

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

ব্যবহার করা (a%9or a)+(b%9or b)আসলে চেয়ে খাটো হতে প্রমাণিত sum(map(int(`a`+`b`)))!


আমি মনে করি আপনি বোঝাতে চেয়েছেন sum(map(int,a+b))(মন্তব্যগুলিতে কীভাবে ব্যবহার করবেন তা অনুমান করতে পারবেন না)

1

পাওয়ারশেল , 79 বাইট

$b,$c=0,1;for($a=$args[0];$a;$a--){$z=[char[]]"$b$c"-join'+'|iex;$b=$c;$c=$z}$b

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

দৈর্ঘ্য বিরক্তিকর পুনরাবৃত্তি সমাধান যা প্রতিটি forলুপের জন্য সরাসরি অঙ্ক-সমষ্টি গণনা করে । লুপের শেষে, আমরা যে সংখ্যাটি চাই তা এতে রয়েছে $b, তাই এটি পাইপলাইনে রেখে গেছে এবং আউটপুট অন্তর্ভুক্ত। নোট করুন যে যদি ইনপুট হয় 0, তবে লুপটি প্রবেশ করবে না যেহেতু শর্তসাপ্য মিথ্যা, তাই $bরয়ে গেছে 0


1

ব্যাচ, 85 বাইট

@set/ax=0,y=1
@for /l %%i in (1,1,%1)do @set/az=x-x/10*9+y-y/10*9,x=y,y=z
@echo %x%

আমি ভাবছিলাম যে আমি কীভাবে আমার জাভাস্ক্রিপ্টের উত্তরটি ব্যাচে পোর্ট করতে যাচ্ছি তবে ক্লুটি @ ডেনিসের পাইথন সমাধানে ছিল।


1

পাইথ, 20 বাইট

J,01VQ=+JssjRT>2J)@J

এমন একটি প্রোগ্রাম যা শূন্য সূচকযুক্ত পূর্ণসংখ্যার ইনপুট নেয় এবং ফলাফল মুদ্রণ করে।

পরীক্ষা স্যুট (বিন্যাসের প্রথম অংশ)

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

[ব্যাখ্যা পরে আসছে]


1

রুবি, 58 বাইট

->n{n<3?n<=>0:"9aa2358dc7a89hhgfda56b8a"[n%24].to_i(18)}

সহজ হার্ডকোডযুক্ত সমাধান।



1

অক্টাভা, 148 বাইট

function f = fib(n)
  if (n <= 1)
    f = n;
  else
    f = sum(int2str((fib(n - 1)))-48) + sum(int2str((fib(n - 2)))-48);
  endif
endfunction

পিপিসিগিতে আপনাকে স্বাগতম! প্রথম প্রথম পোস্ট!
Rɪᴋᴇʀ

1

হাস্কেল, 151 বাইট

import Numeric
import Data.Char
s i=foldr(\c i->i+digitToInt c)0$showInt i""
d a b=a:d b(s a+s b)
f 0=0
f 1=1
f 2=1
f i=d 2 3!!fromIntegral(mod(i-3)24)

f 123456789012345678901234567890123456789012345678উদাহরণস্বরূপ, সাথে ফাংশনটি আহ্বান করুন ।

কোডটি খুব বড় সূচকগুলির সাথেও কাজ করে। বাস্তবায়িত মডুলোর 24 কার্যকারিতার কারণে এটি খুব দ্রুত।

সঙ্কুচিত কোড:

-- FibonacciDigital
-- Gerhard
-- 13 February 2017

module FibonacciDigital () where

import Numeric
import Data.Char

-- sum of digits
digitSum :: Int -> Int 
digitSum i = foldr (\c i -> i + digitToInt c) 0 $ showInt i ""

-- fibonacci digital sequence function with arbitrary starting values
fibonacciDigitals :: Int -> Int -> [Int]
fibonacciDigitals a b = a : fibonacciDigitals b (digitSum a + digitSum b)

-- index -> fibonacci digital value
f :: Integer -> Int 
f 0 = 0 
f 1 = 1 
f 2 = 1 
f i = fibonacciDigitals 2 3 !! fromIntegral (mod (i-3) 24) 

-- End

0

আর, 90 বাইট

একটি মারাত্মক দীর্ঘ সমাধান, তবে আমার কাছে 108 টি মূলত এটির চেয়ে ভাল। আমি সন্দেহ করি যে এটি করার আরও অনেক ভাল উপায় আছে তবে আমি এই মুহূর্তে এটি দেখতে পাচ্ছি না।

function(n,x=0:1){repeat`if`(n,{x=c(x,sum(scan(t=gsub('',' ',x))))[-1];n=n-1},break);x[1]}

এই একটি নামহীন ফাংশন যা ব্যবহার করে gsubএবং scan(t=সংখ্যার মধ্যে ভেক্টর সংখ্যা বিভক্ত করতে। এর যোগফল ভেক্টরে যুক্ত করা হয় যখন প্রথম আইটেমটি বাদ দেওয়া হয়। repeatক্রম nবারের মধ্য দিয়ে যাওয়ার জন্য ব্যবহৃত হয় এবং ফলাফলটি ভেক্টরের প্রথম আইটেম।



0

গণিত, 67 বাইট

r=IntegerDigits;f@0=0;f@1=1;f[x_]:=f@x=Tr@r@f[x-1]+Tr@r@f[x-2];f@#&
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.