नारायण-जिदेक-कपेल संख्याएँ


17

एक इनपुट n दिए गए n वें नारायण-ज़िदक-कैपेल नंबर उत्पन्न करें । सबसे कम बाइट्स जीतते हैं।

f (1) = 1, f (n) पिछली मंजिल (n / 2) का योग है नारायण-जिदेक-कैपेल शब्द।

परीक्षण के मामलों:

f(1)=1

f(9)=42

f(14)=1308

f(15)=2605

f(23)=664299

12
प्रोग्रामिंग पहेलियाँ और कोड गोल्फ में आपका स्वागत है! यह एक अच्छी पहली चुनौती है। हालांकि यह अंततः आपके ऊपर है, आमतौर पर हम एक उत्तर को स्वीकार करने के लिए कम से कम एक सप्ताह इंतजार करने की सलाह देते हैं। पहले से स्वीकृत उत्तर होने से अन्य उपयोगकर्ताओं को यह संकेत मिल सकता है कि चुनौती कम या ज्यादा है, जो उन्हें भाग लेने से हतोत्साहित करती है।
एलेक्स ए।

जवाबों:


6

जेली, 11 10 बाइट्स

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

7

रूबी, 34 32 बाइट्स

यह नारायण-जिदक-कैपेल संख्याओं के लिए OEIS पृष्ठ से एक सूत्र का उपयोग करता है ।

संपादित करें: feersum और नील के लिए धन्यवाद के साथ ऑपरेटर पूर्वता का उपयोग कर कोष्ठक से छुटकारा।

f=->x{x<4?1:2*f[x-1]-x%2*f[x/2]}

निश्चित रूप से आपको कोष्ठक की आवश्यकता नहीं है x%2?
feersum

ठीक है, अगर आप x%2*कम से कम डालते हैं ।
नील

@ फ़ेर्सम और नील आप दोनों को धन्यवाद
Sherlock9

पिछले प्रश्न संपादन ने सुझाव दिया कि सूत्र था x<2?... यह बहुत स्पष्ट धन्यवाद देता है!
नील

6

पायथन 2, 48 42 38 36 बाइट्स

एल्गोरिथ्म OEIS पृष्ठ से लिया गया है। कोई प्रभाव नहीं के साथ n<3बदला जा सकता n<4है। nवें नंबर को लौटाता है , जहां nएक सकारात्मक पूर्णांक होता है।

a=lambda n:n<3or 2*a(n-1)-n%2*a(n/2)

इसे ऑनलाइन आज़माएं


5

05AB1E, 16 बाइट्स

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

इसे ऑनलाइन आज़माएं


5

सी, 38

OEIS एल्गोरिथ्म का अनुवाद। यहाँ पर बस C कोड पर्याप्त नहीं है!

f(n){return n<3?:2*f(n-1)-n%2*f(n/2);}

कैसे n<3?:(...)काम करता है ?
लीजनमोनमल 978 22:11

2
यह एक जीसीसी एक्सटेंशन है (क्लैंग में भी काम करना प्रतीत होता है) जो सशर्त का मूल्यांकन करता है यदि मध्य अभिव्यक्ति गायब है। देखें प्रासंगिक जीसीसी पेज और इस तो सवाल यह अधिक जानकारी के लिए।
उल्लू

4

पायथन 3, 67 बाइट्स

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

Ideone पर इसे आज़माएं



3

गणितज्ञ, 38 बाइट्स

If[#<4,1,2#0[#-1]-#~Mod~2#0[(#-1)/2]]&

अनाम फ़ंक्शन। इनपुट के रूप में input लेता है और आउटपुट के रूप में 𝑓 (as) देता है। रूबी समाधान के आधार पर।


में निर्मित नहीं है?
पागल

@Insane नहीं, कोई अंतर्निहित नहीं है।
22ion में लेगियनममाल 978

एकदम कमाल का!
पागल

2

हास्केल, 34 बाइट्स

f 1=1
f n=sum$f<$>[n-div n 2..n-1]

प्रयोग उदाहरण: f 14-> 1308

परिभाषा का प्रत्यक्ष कार्यान्वयन।



1

जाओ, 63 बाइट्स

func f(i int) int{if(i<4){return 1};return 2*f(i-1)-i%2*f(i/2)}

सी जवाब से बहुत सीधा पोर्ट


0

पीएचपी, 81 बाइट्स

यह पुनरावृत्ति के बिना एक पूर्ण कार्यक्रम है। एक पुनरावर्ती कार्य को 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)नोटिस? है ना?
बिल्ली

नोटिस गैर-महत्वपूर्ण त्रुटि प्रकार हैं जो निष्पादन को रोकते नहीं हैं और आमतौर पर उत्पादन वातावरण में चुप हो जाते हैं। जब भी आप एक अघोषित चर या एक अपरिभाषित ऑफसेट के मूल्य को पाने की कोशिश करते हैं तो आपको एक नोटिस मिलता है। यह कार्यक्रम O [n] अपरिभाषित ऑफसेट (और अघोषित चर के एक जोड़े) के मूल्य को प्राप्त करने की कोशिश करता है ताकि आपको O [n] नोटिस मिलें।
user55641

0

आर, 55 बाइट्स

x[1]=1;for(i in 2:10){x[i]=sum(x[i-1:floor(i/2)])};x[9]

लूप 10में बदलाव करें forऔर x[9]उपयोगकर्ता को जो भी सूचकांक प्राप्त करना है।


यहाँ एक पुनरावर्ती संस्करण है जो 54 बाइट्स लंबा है: f=function(n)ifelse(n<4,1,2*f(n-1)-n%%2*f(floor(n/2)))
DSkoog

0

जावास्क्रिप्ट, 54 52

f=n=>Math.round(n<3?1:2*f(n-1)-n%2*f(parseInt(n/2)))

C उत्तर के आधार पर ।

  • के parseIntबजाय का उपयोग करके 2 बाइट्स बचाता हैMath.floor

0

मेपल, 46 44 बाइट्स

`if`(n<4,1,2*f(n-1)-(n mod 2)*f(floor(n/2)))

उपयोग:

> f:=n->`if`(n<4,1,2*f(n-1)-(n mod 2)*f(floor(n/2)));
> seq( f(i), i = 1..10 );
  1, 1, 1, 2, 3, 6, 11, 22, 42, 84

0

आर, 63 बाइट्स

f=function(n,a=0)if(n<2)1 else{for(i in n-1:(n%/%2))a=a+f(i);a}

a=0को डिफ़ॉल्ट के रूप में जोड़ा जाता है क्योंकि यह मुझे दो घुंघराले कोष्ठक बचाता है। फ़ंक्शन पुनरावर्ती रूप से आवश्यकतानुसार कॉल करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.