জেনারেট করুন এন ম নারায়ণ-Zidek-Capell একটি ইনপুট প্রদত্ত সংখ্যার এন । সবচেয়ে কম বাইট জিতেছে।
f (1) = 1, f (n) হ'ল আগের তল (n / 2) নারায়ণ-জিদেক-ক্যাপেল পদগুলির যোগফল।
পরীক্ষার কেস:
f(1)=1
f(9)=42
f(14)=1308
f(15)=2605
f(23)=664299
জেনারেট করুন এন ম নারায়ণ-Zidek-Capell একটি ইনপুট প্রদত্ত সংখ্যার এন । সবচেয়ে কম বাইট জিতেছে।
f (1) = 1, f (n) হ'ল আগের তল (n / 2) নারায়ণ-জিদেক-ক্যাপেল পদগুলির যোগফল।
পরীক্ষার কেস:
f(1)=1
f(9)=42
f(14)=1308
f(15)=2605
f(23)=664299
উত্তর:
HĊrµṖ߀Sȯ1
n
যুক্তি হিসাবে গ্রহণ করে ফলাফল মুদ্রণ করে।
H divide input by 2
Ċ round up to get first n to recurse
r inclusive range from that to n
µ (chain separator)
Ṗ remove n itself from the range
߀ call self recursively on each value in the range
S sum results
ȯ1 if sum was zero, return one
এটি নারায়ণা-জিদেক-ক্যাপেল সংখ্যার জন্য ওইআইএস পৃষ্ঠা থেকে একটি সূত্র ব্যবহার করে ।
সম্পাদনা করুন: ফেয়ারসাম এবং নীলকে ধন্যবাদ দিয়ে অপারেটর অগ্রাধিকার ব্যবহার করে বন্ধনীগুলি পরিত্রাণ পেয়েছি।
f=->x{x<4?1:2*f[x-1]-x%2*f[x/2]}
x%2
?
x%2*
কমপক্ষে রাখুন না।
x<2?
... এটি এটিকে আরও পরিষ্কার করে তোলে ধন্যবাদ!
ওইআইএস পৃষ্ঠা থেকে নেওয়া অ্যালগরিদম। কোনও প্রভাব ছাড়াই n<3
পরিবর্তিত হতে পারে n<4
। ফেরত পাঠায় n
তম সংখ্যা, যেখানে n
একটি ইতিবাচক পূর্ণসংখ্যা।
a=lambda n:n<3or 2*a(n-1)-n%2*a(n/2)
05AB1E হিসাবে একটি পুনরাবৃত্তি সমাধানের কার্যকারিতা নেই।
X¸sGDN>;ï£Os‚˜}¬
X¸ # initialize a list with 1
sG } # input-1 number of times do
D # duplicate current list
N>;ï£ # take n/2 elements from the list
O # sum those elements
s‚˜ # add at the start of the list
¬ # get the first element and implicitly print
ওইআইএস অ্যালগরিদমের অনুবাদ এখানে প্রায় যথেষ্ট সি কোড নেই!
f(n){return n<3?:2*f(n-1)-n%2*f(n/2);}
n<3?:(...)
কাজ করে?
def f(n):
x=1,
for i in range(n):x+=sum(x[-i//2:]),
print(x[-1])
একটি ফাংশন যা স্টুডুটের মাধ্যমে ইনপুট নেয় এবং STDOUT এ প্রিন্ট করে। এটি সংজ্ঞাটির প্রত্যক্ষ বাস্তবায়ন।
কিভাবে এটা কাজ করে
def f(n): Function with input target term index n
x=1, Initialise term list x as tuple (1)
for i in range(n):... For all term indices in [0,n-1]...
x[-i//2:] ..yield the previous floor(i/2) terms...
x+=sum(...) ...and append their sum to x
print(x[-1]) Print the last term in x, which is the nth term
L|syM>/b2Ub1
এটি অনলাইনে চেষ্টা করুন। পরীক্ষা স্যুট.
একটি ফাংশন সংজ্ঞা y(n)
দেয় যা n
তম নারায়ণ-জিদেক-ক্যাপেল-নম্বর প্রদান করে।
If[#<4,1,2#0[#-1]-#~Mod~2#0[(#-1)/2]]&
বেনামে ফাংশন। ইনপুট হিসাবে 𝑛 নেয় এবং আউটপুট হিসাবে 𝑓 (𝑛) দেয়। রুবি সমাধান ভিত্তিক।
int z(int n){return n<3?1:n%2>0?(2*z(n-1)-z(n/2)):(2*z(n-1));}
এটি পুনরাবৃত্তি ছাড়াই একটি সম্পূর্ণ প্রোগ্রাম। একটি পুনরাবৃত্ত ফাংশন 52 বাইটে সংজ্ঞায়িত করা যেতে পারে (এটি সম্ভবত পরাজিত হতে পারে) তবে এটি কেবল শার্লক 9 এর উত্তরের একটি সুন্দর বিরক্তিকর বন্দর (এবং যদি আপনি চ (100) বা তার চেয়ে বেশি জিজ্ঞাসা করেন তবে এটি ত্রুটিযুক্ত) তাই আমি এটি রাখছি দীর্ঘ এবং আরও আকর্ষণীয় সংস্করণ
<?php for($i=$argv[1];$j=$i;$i--)for(;--$j*2>=$i;)$a[$j]+=$a[$i]?:1;echo$a[1]?:1;
অনেকগুলি (ও [এন]) নোটিশ দেয় তবে তা ঠিক fine
O(n)
নোটিশ? তাই না?
x[1]=1;for(i in 2:10){x[i]=sum(x[i-1:floor(i/2)])};x[9]
লুপে পরিবর্তন করুন 10
এবং ব্যবহারকারী যে কোনও সূচক পেতে চান।for
x[9]
f=function(n)ifelse(n<4,1,2*f(n-1)-n%%2*f(floor(n/2)))
f=n=>Math.round(n<3?1:2*f(n-1)-n%2*f(parseInt(n/2)))
সি উত্তর উপর ভিত্তি করে ।
parseInt
পরিবর্তে ব্যবহার করে 2 বাইট সংরক্ষণ করা হয়েছেMath.floor
f=function(n,a=0)if(n<2)1 else{for(i in n-1:(n%/%2))a=a+f(i);a}
a=0
ডিফল্ট হিসাবে যুক্ত করা হয়েছে কারণ এটি আমার দুটি কোঁকড়ানো বন্ধনী সংরক্ষণ করে। ফাংশন পুনরাবৃত্তভাবে নিজেকে প্রয়োজন হিসাবে কল করে।