एक इनपुट n दिए गए n वें नारायण-ज़िदक-कैपेल नंबर उत्पन्न करें । सबसे कम बाइट्स जीतते हैं।
f (1) = 1, f (n) पिछली मंजिल (n / 2) का योग है नारायण-जिदेक-कैपेल शब्द।
परीक्षण के मामलों:
f(1)=1
f(9)=42
f(14)=1308
f(15)=2605
f(23)=664299
एक इनपुट n दिए गए n वें नारायण-ज़िदक-कैपेल नंबर उत्पन्न करें । सबसे कम बाइट्स जीतते हैं।
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
यह नारायण-जिदक-कैपेल संख्याओं के लिए OEIS पृष्ठ से एक सूत्र का उपयोग करता है ।
संपादित करें: feersum और नील के लिए धन्यवाद के साथ ऑपरेटर पूर्वता का उपयोग कर कोष्ठक से छुटकारा।
f=->x{x<4?1:2*f[x-1]-x%2*f[x/2]}
x%2
?
x%2*
कम से कम डालते हैं ।
x<2?
... यह बहुत स्पष्ट धन्यवाद देता है!
एल्गोरिथ्म OEIS पृष्ठ से लिया गया है। कोई प्रभाव नहीं के साथ 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
OEIS एल्गोरिथ्म का अनुवाद। यहाँ पर बस C कोड पर्याप्त नहीं है!
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]]&
अनाम फ़ंक्शन। इनपुट के रूप में input लेता है और आउटपुट के रूप में 𝑓 (as) देता है। रूबी समाधान के आधार पर।
int z(int n){return n<3?1:n%2>0?(2*z(n-1)-z(n/2)):(2*z(n-1));}
यह पुनरावृत्ति के बिना एक पूर्ण कार्यक्रम है। एक पुनरावर्ती कार्य को 52 बाइट्स में परिभाषित किया जा सकता है (यह उसको हरा पाना संभव हो सकता है), लेकिन यह शर्लक 9 के उत्तर का एक बहुत ही उबाऊ बंदरगाह है (और अगर आप f (100) या अधिक) के लिए पूछें तो यह त्रुटियां हैं, इसलिए मैं इसे डाल रहा हूं। अब और अधिक दिलचस्प संस्करण
<?php for($i=$argv[1];$j=$i;$i--)for(;--$j*2>=$i;)$a[$j]+=$a[$i]?:1;echo$a[1]?:1;
कई (O [n]) नोटिस का कारण बनता है, लेकिन यह ठीक है।
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)))
C उत्तर के आधार पर ।
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
को डिफ़ॉल्ट के रूप में जोड़ा जाता है क्योंकि यह मुझे दो घुंघराले कोष्ठक बचाता है। फ़ंक्शन पुनरावर्ती रूप से आवश्यकतानुसार कॉल करता है।