বর্ধিত ফিবোনাচি সংখ্যা সূচীকরণ


21

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

1 1 2 3 5 8 13...

ইত্যাদি। ফিবোনাচি সংখ্যাগুলি সম্পর্কে চ্যালেঞ্জগুলি এখানে বেশ জনপ্রিয় । তবে কে বলে যে ফিবোনাচি নম্বর দিয়ে শুরু করতে হবে 1, 1? কেন তারা শুরু করতে পারেনি 0, 1? ঠিক আছে, আসুন তাদের 0 থেকে শুরু করার জন্য নতুন সংজ্ঞা দিন:

0 1 1 2 3 5 8 13...

কিন্তু ... আমাদেরও সেখানে থামতে হবে না! আমরা যদি পরেরটিটি পেতে শেষ দুটি নম্বর যুক্ত করতে পারি তবে আমরা একটি নতুন সংখ্যা পুনরায় সংশোধন করতে দ্বিতীয় সংখ্যা থেকে প্রথম সংখ্যাটি বিয়োগ করতে পারি। সুতরাং এটি দিয়ে শুরু হতে পারে 1, 0:

1 0 1 1 2 3 5 8 13...

আমরা এমনকি নেতিবাচক সাথে শেষ করতে পারেন:

-1 1 0 1 1 2 3 5 8 13...

এবং এই সিরিজটিও চিরকাল চলে। আমি মনে করি এটি আকর্ষণীয় যে কীভাবে এটি নিয়মিত ফিবোনাচি সংখ্যাগুলি মিরর করে শেষ করে, কেবলমাত্র প্রতিটি অন্যান্য সংখ্যাকে নেতিবাচক করে তুলেছিল:

13 -8 5 -3 2 -1 1 0 1 1 2 3 5 8 13...

আসুন এই সিরিজটিকে "বর্ধিত ফিবোনাচি নম্বর" বা EFN বলি । যেহেতু সত্যিই এই সিরিজের শুরু করার জন্য একটি সুস্পষ্ট ঋণাত্মক সংখ্যা নয়, আমরা বলবো যে 0 শো এ 0 , নিয়মিত ফিবানচি সংখ্যার ধনাত্মক সূচকের মধ্যে প্রসারিত, এবং নেতিবাচক (অর্ধ-নেতিবাচক?) ফিবানচি সংখ্যার প্রসারিত নেতিবাচক সূচকগুলিতে যেমন:

Indices: ...-7  -6 -5  -4 -3  -2 -1  0  1  2  3  4  5  6  7 ...
Values:  ...13  -8  5  -3  2  -1  1  0  1  1  2  3  5  8  13...

এটি আজকের চ্যালেঞ্জের দিকে পরিচালিত করে:

একটি পূর্ণসংখ্যার এন দেওয়া হয় , প্রতিটি সূচক ফেরত করুন যেখানে N EFN সিরিজে প্রদর্শিত হবে ।

এই কাজটি সম্পর্কে কিছু এলোমেলো পর্যবেক্ষণ:

  • 1 আরও বার প্রদর্শিত EFN অন্য কোন সংখ্যার চেয়ে: [-1, 1, 2]। কোনও সংখ্যা 3 টিরও বেশি জায়গায় উপস্থিত হবে না।

  • প্রতিটি ফিবোনাচি নম্বর> 1 একবার (3, 8, 21, ইত্যাদি) বা দু'বার প্রদর্শিত হবে (2, 5, 13, ইত্যাদি)

বিধি স্পষ্টকরণ:

  • যদি abs(N)কোনও ফিবোনাচি নম্বর না হয় তবে এটি কখনই ইএফএন সিরিজে উপস্থিত হবে না , সুতরাং আপনাকে যদি সম্ভব হয় তবে কিছুই না / খালি সংগ্রহ অবশ্যই আউটপুট করতে হবে, অথবা যদি আপনার ভাষায় এটি সম্ভব না হয়, আপনি কিছু ধ্রুবক অ-সংখ্যাগত মান আউটপুট করতে পারেন।
  • যদি EFN- এ একাধিক জায়গায় N উপস্থিত হয় তবে আপনার আউটপুটটি বাছাই করার দরকার নেই। যদিও প্রতিটি সূচক অবশ্যই একবার প্রদর্শিত হবে।
  • যদিও বেশিরভাগ চ্যালেঞ্জ আপনাকে 1-ভিত্তিক বা 0-ভিত্তিক সূচক ব্যবহার করতে চান তা চয়ন করার অনুমতি দেয়, এই চ্যালেঞ্জটি অবশ্যই বর্ণিত ইনডেক্সিং ব্যবহার করতে হবে (যেখানে 0 0-এ প্রদর্শিত হবে)।
  • আপনি যে কোনও মানক বিন্যাসের মাধ্যমে I / O নিতে পারেন।

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

-13: []
-12: []
-11: []
-10: []
-9: []
-8: [-6]
-7: []
-6: []
-5: []
-4: []
-3: [-4]
-2: []
-1: [-2]
0: 0
1: [-1, 1, 2]
2: [-3, 3]
3: [4]
4: []
5: [-5, 5]
6: []
7: []
8: [6]
9: []
10: []
11: []
12: []
13: [-7, 7]

এবং কিছু বৃহত্তর পরীক্ষার কেস:

89: [-11, 11]
1836311903: [46]
10000: []
-39088169: [-38]

বরাবরের মতো, বাইটের মধ্যে স্বল্পতম উত্তর!


সম্পর্কিত , যদিও এটি সদৃশ নয়, যেহেতু এটির জন্য নেতিবাচক বা নন-ফিবোনাচি সংখ্যাগুলির প্রয়োজন নেই।
DJMcMayhem

12
যাইহোক, আরও একটি ভাল কারণ আছে যে ফিবোনাচি সংখ্যা সর্বদা সূচী করা উচিত যাতে positive F_0 = 0 $, এমনকি শুধুমাত্র ইতিবাচক ফিবোনাচি সংখ্যা ব্যবহার করার সময়। এই সূচকটি এই সুন্দর সম্পত্তিটিকে মঞ্জুরি দেয়: যদি $ কে $ ভাগ করে দেয় $ n $, তবে $ F_k $ ভাগ করুন $ F_n $ $
গ্রেগ মার্টিন

উত্তর:


9

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

নিমিকে ধন্যবাদ 4 বাইট সংরক্ষণ করা হয়েছে

a#b=a:b#(a-b)
f 0=[0]
f a=do{(i,x)<-zip[0..a*a+1]$0#1;[-i|x==a]++[i|abs x==a]}

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

প্রথমে আমরা সেট আপ করি (#), (#)দুটি প্যারামিটার নিয়ে যায় aএবং bএবং সেই তালিকাটি শুরু করে aএবং এরপরে অনুসরণ করে b#(a-b)। এটি একটি অসীম তালিকা তৈরি করে, তবে হাস্কেল অলস কারণ আমাদের চিরতরে লুপিংয়ের বিষয়ে উদ্বিগ্ন হওয়ার দরকার নেই। এটি একটি নির্দিষ্ট জুটির আগে ফিবোনাচি ক্রম তৈরির জন্য মূলত পিছনের দিকে কাজ করে। উদাহরণস্বরূপ (0#1)negativeণাত্মক সূচক সহ সমস্ত ফিবোনাচি সংখ্যার তালিকা হবে।

এখান থেকে আমরা তৈরি f। আমরা একটি অনুক্রমের সন্ধানের জন্য চেষ্টা করছি fএমন একটি যুক্তি গ্রহণ aকরে। এখানে আমরা doএকটি তালিকা বোধগম্য করতে স্বরলিপি ব্যবহার করি। আমরা a*a+1তালিকার 0#11 এর প্রথম উপাদানগুলি নিয়ে শুরু করি । যেহেতু ফাংশনটি a*a+1ফিবোনাচি সিকোয়েন্সের বিপরীতগুলির চেয়ে দ্রুত গতিতে বৃদ্ধি পায় আমরা নিশ্চিত হতে পারি যে আমরা যদি এই গণ্ডির মধ্যে চেক করি তবে আমরা সমস্ত ফলাফল খুঁজে পাব। এটি আমাদের অসীম তালিকার সন্ধান থেকে বাধা দেয়। তারপরে প্রতিটি মান xএবং সূচকের জন্য i, যদি x==aআমরা aসিক্যুয়ালিটির অর্ধাত্মক অর্ধেকটি পাই -iতবে abs x==aআমরা ফিরে আসি এবং যদি আমরা iপাশাপাশি ফিরে যাই কারণ নেতিবাচক অর্ধের পরম মানটি ইতিবাচক অর্ধেক তাই আমরা এটি সেখানে পেয়েছি।

যেহেতু এটি আমাদের [0,0]জন্য তালিকা তৈরি করে 0সেই হার্ড আউটটির জন্য সঠিক আউটপুট।

1: এই কৌশলটি 'জালিয়াতি' পরিষ্কার উত্তর থেকে নেওয়া হয়েছে । এখানে একই speedup aplies যেমন আছে, প্রতিস্থাপন a*a+1সঙ্গে abs a+1অনেক সময় সংরক্ষণ করুন।


প্লাসের uসাথে প্রতিস্থাপন করা একটি বাইট সংরক্ষণ করে: অনলাইনে চেষ্টা করে দেখুন! a#b=a:b#(a-b)0#1
নিমি

@ নিমিমি এটি 4 টি বাইট সংরক্ষণ করে, আপনার টিও লিঙ্কটিতে 3 টি অতিরিক্ত স্পেস রয়েছে।
গম উইজার্ড

5

পরিষ্কার , 132 120 109 বাইট

import StdEnv
g n|n<2=n=g(n-1)+g(n-2)
?k=[e\\p<-[0..k*k+1],e<-if(isOdd p)([~p,p]%(0,k))[p*sign k]|g p==abs k]

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

g :: Int -> Intফিবোনাচি ফাংশন।
? :: Int -> [Int]মধ্যে EFN উপাদান মধ্যে মাত্র ইনডেক্স k^2+1এর 0

এমন একটি সংস্করণের জন্য যা সময়মতো প্রচুর পরিমাণে চলে, এতে পরিবর্তন k*k+1করুন abs k+1


1
সেই তালিকা বোঝার কৌশলটি বেশ ঝরঝরে! আমার উত্তরে আমার 14 বাইট সংরক্ষণ করুন
গম উইজার্ড




1

রেটিনা 0.8.2 , 104 102 বাইট

[1-9].*
$*
(-)?(\b1|(?>\3?)(\2))*(1)$|(0)?.*
$5$1$4$4$#2$*
-1(11)+$

^1(11)+$
-$&,$&
1+
$.&
^2$
-1,1,2

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

[1-9].*
$*

ইনপুট শূন্য না হলে আনরিতে রূপান্তর করুন।

(-)?(\b1|(?>\3?)(\2))*(1)$|(0)?.*
$5$1$4$4$#2$*

পরম মানের ফিবোনাচি সূচক গণনা করুন, তবে সংখ্যাটি যদি ফিবোনাচি নয় তবে এটি মুছুন, যদি না এটি শূন্য হয়। এটি @ মার্টিনএেন্ডারের ফিবোনাচি-টেস্টিং রেজেক্স ব্যবহার করে।

-1(11)+$

Absoluteণাত্মক সংখ্যাগুলি মুছুন যার নিখুঁত মানগুলি বিজোড় ফিবোনাচি সংখ্যা।

^1(11)+$
-$&,$&

বিজোড় ধনাত্মক ফিবোনাচি সংখ্যার জন্য নেতিবাচক সূচকগুলি যুক্ত করুন।

1+
$.&

দশমিক রূপান্তর।

^2$
-1,1,2

এর জন্য অতিরিক্ত সূচকগুলি যুক্ত করুন 1


1

আসলে , 34 বাইট

;╗3*;±kSix⌠;;AF@;1&@0>*YτD(s**╜=⌡░

নিষ্ঠুর-শক্তি দিন বাঁচায়

ব্যাখ্যা:

;╗3*;±kSix⌠;;AF@;1&@0>*YτD(s**╜=⌡░
;╗                                  save a copy of the input (let's call it N) to register 0 (the main way to get additional values into functions)
  3*;±                              -3*N, 3*N
      kSi                           push to list, sort, flatten (sort the two values on the stack so that they are in the right order for x)
         x                          range(min(-3*N, 3*N), max(-3*N, 3*N))
          ⌠;;AF@;1&@0>*YτD(s**╜=⌡░  filter (remove values where function leaves a non-truthy value on top of the stack):
           ;;                         make two copies of parameter (let's call it n)
             AF                       absolute value, Fib(|n|)
               @;                     bring a copy of n to the top of the stack and make another copy
                 1&                   0 if n is divisible by 2 else 1
                   @0>                1 if n is negative else 0 (using another copy of n)
                      *               multiply those two values (acts as logical AND: is n negative and not divisible by 2)
                       YτD            logical negate, double, decrement (maps [0, 1] to [1, -1])
                          (s          sign of n (using the last copy)
                            **        multiply Fib(|n|), sign of n, and result of complicated logic (deciding whether or not to flip the sign of the value for the extended sequence)
                              ╜=      push value from register 0, equality comparison (1 if value equals N else 0)

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




0

05 এ বি 1 ই , 36 বাইট

x*ÝʒÅfIÄQ}Ii®šë1KIdiÐ`ÉiD(ì}ëD`Èi(ë¯

এখানে আরও ভাল পন্থা থাকতে হবে ..>।> 0এই চ্যালেঞ্জের জন্য বিভিন্ন পরিস্থিতিতে ছয়টি (বা আমরা অন্তর্ভুক্ত থাকলে সাতটি ) রয়েছে এবং এটি আমাকে হত্যা করছে ..

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

x            # Create a list in the range [0, (implicit) input * input * 2]
   ʒ     }     # Filter this list by:
    Åf         #  Where the Fibonacci value at that index
      IÄQ      #  Is equal to the absolute value of the input
Ii             # If the input is exactly 1:
  ®š           #  Prepend -1 to the list
ë              # Else:
 1K            #  Remove all 1s (only applies to input -1)
 Idi           #  If the input is non-negative:
    Ð`Éi   }   #   If the found index in the list is odd:
        D    #    Prepend its negative index to the list
   ë           #  Else (the input is negative):
    Di       #   If the found index in the list is even:
        (      #    Negate the found index
       ë       #   Else (found index is odd):
        ¯      #    Push an empty array
               # (Output the top of the stack implicitly as result)

কয়েকটি ধাপে ধাপে উদাহরণ:

Input:  Filtered indices:  Path it follows (with actions) and result:

-8      [6]                NOT 1 → neg → even index → negate index: [-6]
-5      [5]                NOT 1 → neg → odd index → push empty array: []
-1      [1,2]              NOT 1 → (remove 1) neg → even remaining index: negate index: [-2]
0       [0]                NOT 1 → even index → negate index: [0]    
1       [1,2]              1 → prepend -1: [-1,1,2]
5       [5]                NOT 1 → non-neg → odd index → Prepend neg index: [-5,5]
8       [6]                NOT 1 → non-neg → even index → (nothing): [6]


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