ফিবোনাচি পণ্য


13

ইতিবাচক ফিবোনাচি সংখ্যার একটি অনন্য যোগ হিসাবে আপনি 0 টিরও বেশি সংখ্যাকে পচন করতে পারেন। এই প্রশ্নে আমরা বার বার বৃহত্তম সম্ভাব্য ইতিবাচক ফিবোনাচি সংখ্যাটি বিয়োগ করে এটি করি । উদাহরণ:

1 = 1
2 = 2
3 = 3
4 = 3 + 1
12 = 8 + 3 + 1
13 = 13
100 = 89 + 8 + 3

এখন, আমি কোনও ফিবোনাচি পণ্যটিকে উপরের মতো একই তালিকাগুলি বলি , তবে সংখ্যার পরিবর্তে গুণক দ্বারা প্রতিস্থাপন করেছি। উদাহরণস্বরূপ f(100) = 89 * 8 * 3 = 2136,।

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


Testcases:

1: 1
2: 2
3: 3
4: 3
5: 5
6: 5
7: 10
8: 8
9: 8
42: 272
1000: 12831
12345: 138481852236

6
বিবৃতিটি বেশ সঠিক নয়। যেমন 2হিসাবে ক্ষয় হতে পারে -1 + 3। জেকেন্ডারফের উপপাদ্যটির সঠিক বক্তব্যটি হ'ল ধনাত্মক ফাইবোনাচি সংখ্যাটি ইতিবাচক সূচক সহ একটানা ফিবোনাচি সংখ্যার যোগ হিসাবে স্বতন্ত্রভাবে পচে যেতে পারে।
পিটার টেলর

1
@ পিটারটেলর আমি এই প্রশ্নের জন্য নেতিবাচক ফিবোনাচি সংখ্যার অংশটিকে বিবেচনা করি না। ধারাবাহিকভাবে বা আপনি যখন সূচকগুলি চান কেবল তা বিবেচনা করে না, আমরা এই প্রশ্নের সূচকগুলি সম্পর্কে যত্ন নিই না।
orlp

1
আমি বলছি না যে আপনার নেতিবাচক ফিবোনাচি সংখ্যার সমর্থন করার জন্য প্রশ্নটি পরিবর্তন করা উচিত: আমি বলছি যে আপনি এটি করছেন এমন অনুমানগুলি সম্পর্কে স্পষ্ট করে এটি সম্পাদনা করা উচিত।
পিটার টেলর

1
@ পরস্পর ক্রমাগত বা কিছুটা গুরুত্বপূর্ণ নয়, যেহেতু দুটি ভিন্ন রূপ দুটি আলাদা পণ্য দেয়। আপনি ইতিমধ্যে সমস্যাটি এমনভাবে বর্ণনা করেছেন যা ইতিমধ্যে স্পষ্টতই পর পরের ফিবোনাচি শর্তাবলী বিধিবিধান করে, যদিও, সেখানে উদ্বিগ্ন হওয়ার কিছু নেই।
হাবস

2
(বিশেষত: এফ (এন) এবং এফ (এন + 1) উভয়ই আউটপুটে উপস্থিত হতে পারে না কারণ আলগোরিদম গ্যারান্টি দেয় যে, তাদের বিবেচনা করার আগে, বাকীটি ইতিমধ্যে এফ (এন + 2) = এফ (এন) + এর চেয়ে কম এফ (এন + 1))

উত্তর:


5

জেলি , 16 15 বাইট

Rf1+С¤ṪạµÐĿIAP

বিশেষত দ্রুত বা মেমরি বান্ধব নয়, তবে সমস্ত পরীক্ষার ক্ষেত্রে যথেষ্ট দক্ষ। এটি অনলাইন চেষ্টা করুন!

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

Rf1+С¤ṪạµÐĿIAP  Main link. Argument: n (integer)

         µ       Combine the chain to the left into a link.
          ÐĿ     Apply that link until the results are no longer unique.
                 Return the list of unique results.
      ¤            Combine the two links to the left into a niladic chain.
  1                  Set the left (and right) argument to 1.
   +D¡               Apply + to the left and right argument, updating the left
                     argument with the sum, and the right argument with the
                     previous value of the left one. Return the list of results.
                     Repeat this process n times.
                   This yields n + 1 Fibonacci numbers, starting with 1, 2.
R                  Range; map k to [1, ..., k].
 f                 Filter; keep the items in the range that are Fibonacci numbers.
       Ṫ           Tail; yield the last one or 0 if the list is empty.
        ạ          Absolute difference with k.
                   This is the argument of the next iteration.
            I    Compute the increments of the arguments to the loop, yielding
                 the selected Fibonacci numbers (with changed sign).
             A   Apply absolute value to each.
              P  Compute their product.  

6
এটা বড় মনে হয়, ডেনিস।
orlp

9

পাইথন, 54 বাইট

f=lambda n,a=1,b=1:n<1or b>n and a*f(n-a)or f(n,b,a+b)

কিছু ভাল পুরানো পুনরাবৃত্তি।


5

পার্ল, 69 63 + 4 ( -pl61পতাকা) = 67 বাইট

#!perl -pl61
while($_){$n=$m=1;($n,$m)=($m,$n+$m)until$m>$_;$_-=$n;$\*=$n}}{

ব্যবহার:

> echo 42 | perl -pl61e 'while($_){$n=$m=1;($n,$m)=($m,$n+$m)until$m>$_;$_-=$n;$\*=$n}}{'

Ungolfed:

while (<>) {
# code above added by -p
    # $_ has input value
    # $\ = 1 by -l61
    while ($_ != 0) {
        my $n = 1;
        my $m = 1;
        while ($m <= $_) {
            ($n, $m) = ($m, $n + $m);
        }
        $_ -= $n;
        $\ *= $n;
    }
} {
# code below added by -p
    print;  # prints $_ (undef here) and $\
}

ভাবনা


ব্যাখ্যাটিতে উল্লেখ করা উচিত যে অষ্টাল 061হ'ল চরিত্রটির জন্য ASCII এনকোডিং '1'$\এটিকে নিকট-মুক্তের জন্য মুদ্রণ করতে ব্যবহার করতে দুর্দান্ত হ্যাক ।
পিটার কর্ডেস

2

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

f=(n,a=1,b=1)=>n?b>n?a*f(n-a):f(n,b,a+b):1

@ Sp3000 এর উত্তর বন্দর আসল 78 বাইট সংস্করণ:

f=(n,a=[2,1])=>n>a[0]?f(n,[a[0]+a[1],...a]):a.map(e=>e>n?0:(r*=e,n-=e),r=1)&&r

2

> <> , 57 বাইট

111\ ;n{/
:@+>:{:})?\$:@@
~{*}:0=?\}>:0${:})?$~:{$-$:1@?$

প্রোগ্রাম শুরু হওয়ার সময় স্ট্যাকের সাথে ইনপুট নম্বর উপস্থিত থাকার প্রত্যাশা।

f0, f1, f2, ..., fnইনপুট ( i) এর চেয়ে বড় সংখ্যার না পৌঁছানো পর্যন্ত স্ট্যাকের উপরে ফিবোনাচি সিকোয়েন্স ( ) তৈরি করে । তারপরে, একটি পণ্য ( p) দিয়ে প্রাথমিকভাবে 1...

while (i != 0)
   if (fn <= i)
      i = i - fn
      p = p * fn
   else
      i = i - 0
      p = p * 1
   discard fn
output p

অনলাইনে চেষ্টা করে দেখুন!


নিস! আমি আপনাকে অনলাইন সংকলক
লুইস মেন্ডো


1

পাইথ, 24 বাইট

W=-QeaYh.WgQeH,eZsZ1;*FY

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

ব্যাখ্যা:

Q ইনপুট নম্বর দিয়ে বরাদ্দ করা হয়।

অংশটি h.WgQeH,eZsZ1বৃহত্তম ফিবোনাচি সংখ্যা গণনা করে, এটি ছোট বা সমানQ

h.WgQeH,eZsZ1
            1   start with H=Z=1
 .WgQeH         while Q >= end(H):
       ,eZsZ       H=Z=(end(Z), sum(Z))
h               first

সুতরাং Q = 10, এটি সংখ্যা / জোড় উত্পন্ন করে:

1 -> (1,1) -> (1,2) -> (2,3) -> (3,5) -> (5,8) -> (8,13) -> 8

বাকি কোডটি পার্টিশন গণনা করে এবং সংখ্যাকে একসাথে গুণ করে:

W=-QeaY...;*FY    implicit: Y = empty list
     aY...        add the calculated Fibonacci number to the empty list
    e             take the last element of Y (yes the number we just added)
 =-Q              and update Q with the difference of Q and ^
W         ;       continue until Q == 0
           *FY    multiply all number in Y and print

স্পষ্টতই অনেকগুলি সংক্ষিপ্ত সমাধান রয়েছে (যদিও সত্যিই খারাপ রান-বারের সাথে রয়েছে), এর মতো *FhfqQsTyeM.u,eNsNQ1


1

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

পারস্পরিক পুনরাবৃত্তি জন্য ইয়ে:

(a&b)c|c<1=1|b>c=a*f(c-a)|d<-a+b=b&d$c
f=0&1
  • a পূর্ববর্তী ফিবোনাচি নম্বর
  • b হ'ল বর্তমান ফিবোনাচি সংখ্যা
  • c ইনপুট হয়
  • f কাঙ্ক্ষিত ফাংশন

কম গল্ফড:

(a & b) c | c == 0    = 1
          | c <  b    = a * f (c-a)
          | otherwise = b & (a + b) $ c
f x = (0 & 1) x

1

আসলে, 22 বাইট

W;╗uR♂F;`╜≥`M░M;╜-WXkπ

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

ব্যাখ্যা:

W;╗uR♂F;`╜≥`M░M;╜-WXkπ
                        (implicit input)
W                 W     while top of stack is truthy:
 ;╗                       push a copy of n to reg0
   uR♂F;                  push 2 copies of [Fib(a) for a in range(1, n+2)]
        `╜≥`M░            filter: take values where n <= Fib(a)
              M;          two copies of maximum (call it m)
                ╜-        subtract from n (this leaves n-m on top of the stack to be the new n next iteration, with a copy of m below it)
                   X    discard the 0 left over after the loop ends
                    kπ  product of all stack values

আসলে কি এর নিজস্ব এনকোডিং রয়েছে? আমি 22 টি অক্ষরে 35 বাইট গণনা করি। mothereff.in/…
বিড়াল

1
@ কেট যেমন মারাত্মকভাবে, এটি সিপি 437 ব্যবহার করে।
মেগো

1

জাভাস্ক্রিপ্ট (ES6) 134 106 92 বাইট

একটি জায়গা সন্ধানের জন্য @ বিড়ালকে ধন্যবাদ জানাই।

n=>{for(c=[a=b=s=1,1];a+b<=n;)a+=b,c.unshift(b+=a,a);c.map(i=>i<=n&&(n-=i)&(s*=i));alert(s)}

আমার ফোনে তৈরি করা কেবলমাত্র একটি অপ্রতিরোধ্য সংস্করণ, আমি ঘরে ফিরে একবার এটিকে গল্ফ করে দেই। ধারণা আমরা স্বাগত জানাই।


আছে এক superflouous হোয়াইটস্পেস। : পি
বিড়াল

1

ফিরে , 44 বাইট

[a:[a;][1$[¤¤+$a;->~][]#%$␌a;\-a:]#␁[¤][×]#]

Try it here.

আশ্চর্যজনকভাবে অক্ষম অজ্ঞাত লাম্বদা যা স্ট্যাক 2-এর ফলাফল ছেড়ে দেয়। ব্যবহার:

12345[a:[a;][1$[¤¤+$a;->~][]#%$␌a;\-a:]#␁[¤][×]#]!

দ্রষ্টব্য: ␌ এবং হ'ল তাদের নিজ নিজ অপরিশোধিত অক্ষরের জন্য স্থানধারক: ফর্ম ফিড এবং শিরোনামের শুরু

ব্যাখ্যা

[                                           ]  lambda
 a:                                            store input to a
   [  ][                         ]#            while loop
    a;                                           check if a is truthy
        1$[¤¤+$a;->~][]#%                        if so, generate all fibonacci numbers less than a 
                         $␌                      push copy of TOS to stack2
                           a;\-a:                a-=TOS
                                   ␁[¤][×]#   get product of stack2

আমি 42 টি অক্ষরে 46 বাইট গণনা করি। যদি রিটার্নে কিছু ধরণের বিশেষ এনকোডিং ব্যবহার করা হয়, তবে এটি 42 টি চর জুড়ে 42 বাইট হওয়া উচিত, তবে এটি ইউনিকোড বলে মনে হয়, তাই এটি 46
বিড়াল

আসলে, আমি ঠিক বুঝতে পেরেছিলাম যে আমি কিছু অপ্রিন্টেবলগুলি রাখা ভুলে গেছি।
মামা ফান রোল

সেগুলি কী তা জানাতে আমার একটি মাইক্রোস্কোপের দরকার ছিল, তাই আমি আপনার জন্য তাদের সাথে লিঙ্ক করেছি। : ডি (আমি এটি বলতে পারি না এটি এসওএইচ বা বিওএম ছিল কিনা)
বিড়াল

0

পিএইচপি, 119 বাইট

কোড (পাঠযোগ্যতার জন্য দুটি লাইনে মোড়ানো):

for($o=$c=1;$c<=$n=$argv[1];$f[++$k]=$c,$a=$b,$b=$c,$c+=$a);
for($i=$k;$i;$i--)for(;$n>=$d=$f[$i];$n-=$d,$o*=$d);echo$o;

$fফিবোনাচি সংখ্যায় প্রথম লাইন গণনা করে $n(কমান্ড লাইনে প্রদত্ত যুক্তি) smaller দ্বিতীয় লাইনটি ফিবোনাচি ফ্যাক্টরগুলি (বিয়োগ দ্বারা) গণনা করে এবং পণ্যটিকে গুণতে গুণিত করে $o

<?php(প্রযুক্তিগতভাবে প্রোগ্রামটির অংশ নয়) দিয়ে কোডটি প্রস্তুত করুন , একটি ফাইলে রাখুন ( fibonacci-factors.php) তারপরে এটি চালান:

$ php -d error_reporting=0 fibonacci-factors.php 100
# The output:
2136

অথবা এটি ব্যবহার করে চালান php -d error_reporting=0 -r '... code here ...' 100

Ungolfed কোড এবং পরীক্ষা স্যুট পাওয়া যাবে GitHub থেকে


0

প্রশ্ন, 47 বাইট

m:{*/1_-':|(0<){y-x x bin y}[*+60(|+\)\1 0]\x}

পরীক্ষা

+(i;m'i:1 2 3 4 5 6 7 8 9 42 1000 12345)

এটি জোড় (i, মানচিত্র (মি, i)) হিসাবে পড়ুন, যেখানে মি গণনাকারী ফাংশন এবং আমি বিভিন্ন আর্গুমেন্ট

লিখেছেন

1     1
2     2
3     3
4     3
5     5
6     5
7     10
8     8
9     8
42    272
1000  12831
12345 138481852236

ব্যাখ্যা

n funtion\arg ফাংশন প্রয়োগ করে (ফাংশন (ফাংশন (... ফাংশন (আরগস))) n বার (অভ্যন্তরীণভাবে তাল পুনরাবৃত্তি ব্যবহার করে), এবং ফলাফলগুলির অনুক্রমটি প্রদান করে We আমরা ফাইবোনাসি সিরিজের 60 টি প্রথম আইটেম গণনা করি that *+60(|+\)\1 0সেক্ষেত্রে ফাংশনটি ( | +): + a একটি অনুক্রমের উপর প্রয়োগ করা আংশিক অঙ্কগুলি গণনা করে (প্রাক্তন + \ 1 2 3 হল 1 3 6) এবং | সিক্স বিপরীত হয় সুতরাং প্রতিটি 'পুনরাবৃত্তি' আমরা পূর্ববর্তী দুটি ফাইবোনাকির সংখ্যার আংশিক যোগফল গণনা করি এবং আংশিকটি ফিরে পাই অঙ্কগুলি বিপরীত 60(|+\)\1 0হয় sequ 1 0, 1 1, 2 1, 3 2, 5 3, 8 5, 13 8, 21 13, ... *+এই ফলটিকে উল্টাতে (ট্রাসপোজ) প্রয়োগ করা হয় এবং এটি প্রথম গ্রহণ করে। ফলাফলটি সিকোয়েন্স 1 1 2 3 5 8 13 21 34 55 ..

(cond)function\args কনড সত্য হিসাবে ফাংশন (ফাংশন (.. ফাংশন (আরগস))) প্রয়োগ করে এবং আংশিক ফলাফলের অনুক্রমটি প্রদান করে

function[arg] একাধিক আর্গুমেন্টের ক্রিয়াকলাপের জন্য প্রয়োগ করা একটি প্রজেকশন তৈরি করে (আংশিক প্রয়োগ)

আমরা আরগগুলিকে নাম দিতে পারি, তবে অন্তর্নিহিত নামগুলি হল x, y, z

{y-x x bin y}[*+60(|+\)\1 0]আংশিক প্রক্ষেপণের সাথে আরগ্স x, y সহ একটি ল্যাম্বদা ঘোষনা করে (আর্গ x ফিবোনাচি সিরিজ, * + 60 (| +) \ 1 0) হিসাবে গণনা করে। x ফাইবোনাচি মানগুলি এবং y প্রক্রিয়া করার জন্য সংখ্যাটি উপস্থাপন করে। বাইনারি অনুসন্ধান (বিন) বৃহত্তর ফিবোনাচি নম্বর <= y ( x bin y) এর সূচকটি সনাক্ত করতে এবং x এর সাথে সম্পর্কিত মানটি বিয়োগ করতে ব্যবহৃত হয়।

আংশিক রেজোলস থেকে পণ্য গণনা করতে আমরা সেগুলি বিপরীত করি এবং প্রতিটি জুটির পার্থক্য গণনা করি ( -':|), প্রথমটি বাদ দিন ( 1_কারণ 0) এবং বহুগুণ ( */)।

কোড আমরা সঞ্চিত সমষ্টি আগ্রহী একই, কিন্তু সঙ্গে +/পরিবর্তে */। আমরা + বা * এর পরিবর্তে অন্য কোনও ডায়াডিক অপারেটরও ব্যবহার করতে পারি

কার্যকর করার দক্ষতা সম্পর্কে

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

আমি একটি দ্বিতীয় সংস্করণ তৈরি করেছি (মন্তব্য ব্যতীত দৈর্ঘ্য 48 বাইট) এবং উভয় সংস্করণে বারবার পরীক্ষার ক্ষেত্রে ব্যাটারির 1000 বার ব্যাটারি করা হয়েছে।

f:*+60(|+\)\1 0;m:{*/1_-':|(0<){x-f f bin x}\x}    /new version

কার্যকর করার সময়: আসল সংস্করণ 0'212 সেগ, নতুন সংস্করণ 0'037 সেগ g

আসল সংস্করণ প্রতি ফাংশন অ্যাপ্লিকেশনটিতে একবার ফাইব্বোনচি সেরি গণনা করে; নতুন সংস্করণ কেবল একটি ফাইবোনাকি গণনা করে।

উভয় ক্ষেত্রে ফিবোনাচি সিরিজের গণনা লেজ পুনরাবৃত্তি ব্যবহার করে

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