নেতিবাচক ফিবোনাচি নাম্বার


28

আপনি সম্ভবত সকলেই ফিবোনাচি ক্রমটি জানেন:

fibonacci(n)=fibonacci(n-1)+fibonacci(n-2)
fibonacci(0)=0
fibonacci(1)=1

আপনার কাজ এটি হিসাবে সহজ হতে পারে:

  • প্রদত্ত পূর্ণসংখ্যা Nগণনাfibonacci(n)

তবে এখানে টুইস্টটি রয়েছে:

  • নেতিবাচকও করুন N

অপেক্ষা করুন। কি?

fibonacci(1)=fibonacci(0)+fibonacci(-1)

সুতরাং

fibonacci(-1)=1

এবং

fibonacci(-2)=fibonacci(0)-fibonacci(1)=-1

এবং তাই ...

  • এটি একটি তাই বাইট জয়ের মধ্যে সংক্ষিপ্ততম প্রোগ্রামম।
  • আপনি কোনও ফাংশন বা একটি পূর্ণ প্রোগ্রাম জমা দিতে পারেন
  • এন [-100,100] এ রয়েছে

সিএসভিতে টেস্টকেস (গুলি):

-9;-8;-7;-6;-5;-4;-3;-2;-1;0;1;2;3;4;5;6;7;8
34;-21;13;-8;5;-3;2;-1;1;0;1;1;2;3;5;8;13;21

ইঙ্গিত:

n <0 এবং n & 1 == 0:

fibonacci(n)=fibonacci(abs(n))*-1


না। খনি আপনাকেও নেতিবাচক সংখ্যাগুলি সমর্থন করতে চায়।
রোমান গ্রাফ

7
আমি মনে করি এটি কোনও ডুপ নয়। বিদ্যমান ফিবোনাচি চ্যালেঞ্জের প্রথম পৃষ্ঠার উত্তরগুলির মধ্যে, কেবল 1 টি নেতিবাচকদের পরিচালনা করতে পারে, এবং বাকি সমস্তগুলিকেও পিছনের দিকে যাওয়ার জন্য উল্লেখযোগ্যভাবে পরিবর্তন করা দরকার।
xnor

কিছু যুক্ত। আরও যোগ করতে নির্দ্বিধায়। @ ফ্লিপ
রোমান গ্রাফ

1
টেস্ট কেস ফর্ম্যাট করার বিষয়ে এই মেটা পোস্টটি পড়ুন : অভিনব টেবিলগুলি এড়ানোর চেষ্টা করুন
ফ্লিপট্যাক

এবং সিএসভি দ্বারা আপনার মানে এসএসভি (সেমিকোলন বিচ্ছিন্ন মান)?
এনএইচ।

উত্তর:


22

গণিত, 9 বাইট

Fibonacci

হ্যাঁ, এই অন্তর্নির্মিত কার্যটি নেতিবাচক সংখ্যাগুলিকে সমর্থন করে।


2
আমি পোস্টে যে উত্তরটি আসছিলাম এটি প্রায় কথার জন্য শব্দ: ডি
গ্রেগ মার্টিন

17

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

 @(n)([1,1;1,0]^n)(2)

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

ব্যাখ্যা

এটি ফিবোনাচি ক্রমটি f(n)এই হিসাবে লেখা যেতে পারে তা ব্যবহার করে (এটি একটি ম্যাট্রিক্স ভেক্টর স্বরলিপি হওয়া উচিত):

recursively:

[f(n+1)]  = [1  1] * [f(n)  ]
[f(n)  ]    [1  0]   [f(n-1)]

নির্দিষ্ট ভাবে:

[f(n+1)]  = [1  1] ^n * [1]
[f(n)  ]    [1  0]      [0]

এর অর্থ হ'ল এই ম্যাট্রিক্সের পাওয়ারের উপরের ডান প্রবেশের nমানটি f(n)আমরা সন্ধান করছি for স্পষ্টতই আমরা এই ম্যাট্রিক্সকেও পুরোপুরি র‌্যাঙ্ক হিসাবে বিপরীত করতে পারি এবং সম্পর্কটি এখনও একই পুনরাবৃত্ত সম্পর্কের বর্ণনা দেয়। এর অর্থ এটি নেতিবাচক ইনপুটগুলির জন্যও কাজ করে।


1
(কীভাবে) এটিও নেতিবাচক ইনপুটটির জন্য কাজ করে?
রোমান গ্রাফ

হ্যাঁ, ব্যাখ্যা আসছে ...
flawr

ans(-6)ইতিবাচক হতে বোঝানো হচ্ছে ?
ফ্লিপট্যাক

@ ফ্লিপট্যাক দুঃখিত, এটি সূচক বদলের কারণে হতে পারে। আমি 1-ভিত্তিক ব্যবহার করেছি, যখন প্রশ্ন 0-ভিত্তিক ব্যবহার করেছে, আমি এখনই এটি ঠিক করেছি।
flawr

13

ম্যাক্সিমা, 3 বাইট

 fib

ইতিবাচক এবং নেতিবাচক সংখ্যা সমর্থন করে।

এটি (পেস্ট) সিইএসজিএ - ম্যাক্সিমায়ার লাইনে চেষ্টা করুন


আপনি কি ভাষার সাথে একটি লিঙ্ক যুক্ত করতে পারেন?
পাভেল

অবশ্যই একটি অনলাইন ক্যালকুলেটরের সাথে একটি লিঙ্ক যুক্ত হয়েছে!
rahnema1

এছাড়াও WolframAlpha উপর কাজ করে
Thunda

11

পাইথন, 43 বাইট

g=5**.5/2+.5
lambda n:(g**n-(1-g)**n)/5**.5

সুবর্ণ অনুপাত সহ একটি সরাসরি সূত্র g। সঙ্গে fউপরে ফাংশন:

for n in range(-10,11):print f(n) 

-55.0
34.0
-21.0
13.0
-8.0
5.0
-3.0
2.0
-1.0
1.0
0.0
1.0
1.0
2.0
3.0
5.0
8.0
13.0
21.0
34.0
55.0

একই দৈর্ঘ্য, কেবল 5 এর বর্গমূলকে পৃথক করে:

a=5**.5
lambda n:((a+1)**n-(1-a)**n)/a/2**n

আমি এগুলির সাথে প্রতিযোগিতা করতে পারে এমন একটি পুনরাবৃত্ত ফাংশন করার কোনও উপায় দেখিনি see 57 বাইটের জন্য একটি হালকা গল্ফ চেষ্টা:

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

তুলনার জন্য, একটি পুনরাবৃত্তি পদ্ধতি (পাইথন 2 এ 60 বাইট):

n=input()
a,b=0,1;exec"a,b=b,a+b;"*n+"a,b=b-a,a;"*-n
print a

বা, 58 বাইটের জন্য:

n=input()
a,b=0,1;exec"a,b=b,a+cmp(n,0)*b;"*abs(n)
print a

10

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

f=n=>n<2?n<0?f(n+2)-f(n+1):n:f(n-2)+f(n-1)

পরীক্ষা


আমি আপনার ফাংশন সত্যিই পছন্দ করি। আমার এখানে একটি পরামর্শ ছিল, তবে আমি এটিকে উপেক্ষা করেছি - সুতরাং এটি কার্যকর হবে না ...
লূক

5

এমএটিএল , 11 9 বাইট

আমি খুশি [3,2], যা নিশ্চয় golfed করা যেতে পারে, কেউ যদি একটি উপায় জানে আমাকে = জানাতে দয়া করে) (এটা would সাথে কাজ [1,3]।) জন্য -2 বাইট = ধন্যবাদ @LuisMendo)

IHhBiY^2)

এটি অষ্টাভে অ্যা্যানসওয়ারের মতো একই পদ্ধতি ব্যবহার করছে । তবে ম্যাট্রিক্স তৈরি করতে

[1,1]
[1,0]

আমরা কেবল সংখ্যাটি 3এবং 2দশমিক থেকে বাইনারি রূপান্তর করি (যেমন 11এবং 10)।

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


5

জাভাস্ক্রিপ্ট (ES7) 37 বাইট

বিনেটের সূত্র ব্যবহার করে ।

n=>((1+(a=5**.5))**n-(1-a)**n)/a/2**n

এই আউটপুট nতম ফিবানচি NUMBER + - 0.0000000000000005


**ES7 প্রয়োজন।
নীল

ওহ, ভেবেছিল এটি ES6 এর অংশ, তবে আপনি ঠিক বলেছেন। এটা পরিবর্তন। আমি 1B সেভের জন্য বিনেটের সূত্রের আর একটি সংস্করণও ব্যবহার করেছি।
লুক

এখন যেহেতু আমি এটি সম্পর্কে চিন্তা করি, কেবল 1-pতার পরিবর্তে ব্যবহার করা -1/pউচিত একই সাশ্রয়ের জন্য কাজ করা উচিত।
নীল

3

জল্ফ, 2 বাইট

mL

এখানে চেষ্টা করুন!

phiসূত্রটি ব্যবহার করে বাস্তবায়িত ফাইবোনাচি ।


আনকচড সিনট্যাক্স এরর: অপ্রত্যাশিত টোকেন | নতুন ফাংশনে (<নামবিহীন>) পি (ম্যাথ.মিনি.জেএস: ২)) এ অবজেক্টে (math.min.js: 27) টাইপ করা হয়েছে (পি (গণিত.মিন.জেএস: 27) এ টাইপ করুন, <নামবিহীন>: 36:14) অবজেক্ট.এন এ [কারখানা হিসাবে] (ম্যাথ.মিনি.জেএস: 45) এ টি (ম্যাথ.মিনি.জেএস: 27) এফ (ম্যাথ.মিনি.জেএস: 27) অবজেক্ট.জেটে [মিডিয়ান হিসাবে ] (math.min.js: 27) ক্লোন এ (Rawgit.com/ConorOBrien-Foxx/Jolf/master/src/jolf.js:902) Rawgit.com/ConorOBrien-Foxx/Jolf/master/src/jolf এ। জেএস: 2128 (সর্বশেষ গুগল ক্রোম, সংস্করণ 55.0.2883.87 মি)
ইসমাইল মিগুয়েল

@ ইসমাইল মিগুয়েল এটি কেবল ফায়ারফক্সে কাজ করা উচিত
কনর ও'ব্রায়ান

আমার কোনও ধারণা ছিল না, এটি কোথাও নেই
ইসমাইল মিগুয়েল

2

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

s=0:scanl(+)1s;f z|even z,z<0= -f(-z);f z=s!!abs z

1
গার্ড মধ্যে একাধিক পরীক্ষায় সঙ্গে মিলিত হতে পারে ,পরিবর্তে &&: even z,z<0
নিমি

1

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

function f($n){$o=('-','+')[$n-lt0];&(({$a,$b=(2,1|%{f("$n$o$_"|iex)});"$a- $o$b"|iex},{$n*$n})[$n-in(-1..1)])}

ডেমো কল:

-9..9 | %{"{0,2}`t=> {1,3}" -f $_,(f($_))} 

ডেমোর আউটপুট:

-9  =>  34
-8  => -21
-7  =>  13
-6  =>  -8
-5  =>   5
-4  =>  -3
-3  =>   2
-2  =>  -1
-1  =>   1
 0  =>   0
 1  =>   1
 2  =>   1
 3  =>   2
 4  =>   3
 5  =>   5
 6  =>   8
 7  =>  13
 8  =>  21
 9  =>  34

1

Lithp , 88 বাইট

#N::((if(< N 2)((if(< N 0)((-(f(+ N 2))(f(+ N 1))))((+ N))))((+(f(- N 2))(f(- N 1))))))

এই সমস্ত বন্ধনী আমার চেহারা ।

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

সত্যিই খুব ছোট নয়। বর্তমানে একটি পার্সিং বাগ রয়েছে যা ব্যবহার করার জন্য (get N)বা সহজ (+ N)পরিবর্তে তার প্রয়োজন N। আমি আরও ছোটটি বেছে নিয়েছি। তবে আমি মনে করি না যে এগুলি গল্ফ করার জন্য আরও কিছু করা যায়।

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