गिनती के फव्वारे


17

एक फव्वारा पंक्तियों में सिक्कों की व्यवस्था है ताकि प्रत्येक सिक्का नीचे की पंक्ति में दो सिक्कों को छूए, या नीचे की पंक्ति में हो, और नीचे की पंक्ति जुड़ी हो। यहाँ एक 21 सिक्का फव्वारा है:

Http://mathworld.wolfram.com/Fountain.html से


आपकी चुनौती यह गिनना है कि दिए गए सिक्कों के साथ कितने अलग-अलग फव्वारे बनाए जा सकते हैं।

आपको इनपुट एक सकारात्मक पूर्णांक के रूप में दिया जाएगा n। आपको विभिन्न- nफ़ॉरेक्स फव्वारे की संख्या का उत्पादन करना होगा जो मौजूद हैं।

मानक I / O नियम, मानक कमियां प्रतिबंधित। समाधान n = 10एक मिनट के भीतर गणना करने में सक्षम होना चाहिए ।


वांछित उत्पादन n = 1 ... 10:

1, 1, 2, 3, 5, 9, 15, 26, 45, 78

यह क्रम OEIS A005169 है


यह कोड गोल्फ है। सबसे कम बाइट्स जीतता है।


क्या कोई ऐसा कार्य nहै जिसके लिए कार्यक्रम की गारंटी होनी चाहिए? (यानी जिसके बाद यह टूट सकता है)
क्विंटोपिया

@ क्विंटोपिया यह सभी के लिए काम करना चाहिए n, डेटाटाइप, हार्डवेयर आदि की सीमाओं तक
isaacg

जवाबों:


3

पायथन, 57 बाइट्स

f=lambda n,i=0:sum(f(n-j,j)for j in range(1,i+2)[:n])or 1

जैसा कि ओईएस पर देखा गया है , यदि आप प्रत्येक पंक्ति को उसके नीचे की पंक्ति के सापेक्ष आधा कदम आगे बढ़ाते हैं , तो स्तंभ आकार 1 के अधिकतम ऊपर की ओर 1 के साथ सकारात्मक पूर्णांक का अनुक्रम बनाते हैं।

फ़ंक्शन f(n,i)संख्या nऔर अंतिम संख्या के साथ अनुक्रम को गिनता है i। इन्हें अगले कॉलम के आकार के प्रत्येक विकल्प के लिए पुनरावर्ती रूप से संक्षेपित किया जा सकता 1है i+1, जो है range(1,i+2)range(1,i+2)[:n]स्तंभों को बने रहने से अधिक सिक्कों का उपयोग करने से रोकने के लिए , यह कहने की ज़रूरत से बचने के लिए कि नकारात्मक nदेना है 0। इसके अलावा, यह एक स्पष्ट आधार मामले से बचा जाता है, क्योंकि खाली राशि है 0और पुनरावृत्ति नहीं करता है, लेकिन इसके बजाय f(0)सेट करने की आवश्यकता है 1, जिसके लिए or 1पर्याप्त (जैसा होगा +0**n)।


Pyth में 17 बाइट्स:M|sgL-Gd<ShHG1gQ0
isaacg

5

मैथेमेटिका, 59 बाइट्स

SeriesCoefficient[1-Fold[1-x^#2/#&,Range[#,0,-1]],{x,0,#}]&

जीन-फ्रांस्वा अलकोवर द्वारा OEIS पर गणितज्ञ कार्यक्रम के आधार पर।


क्या आप इसे एक सूत्र के रूप में फिर से लिख सकते हैं (मैं अभी मुझे मिले सूत्र की तुलना करना चाहते हैं)? मैं सिर्फ Mathematica =) को नहीं पढ़ सकता
दोष

@flawr अनुक्रम का जनरेटिंग फंक्शन है 1/(1-x/(1-x^2/(1-x^3/(1-x^4/(1-x^5/(...))))))
alephalpha

स्पष्टीकरण के लिए धन्यवाद, यह वास्तव में एक अच्छा तरीका है यदि आपके पास ऐसा शक्तिशाली सीएएस =) है
दोष

3

हास्केल, 60 48 बाइट्स

एक छोटा सा समाधान प्रदान करने के लिए @nimi के लिए धन्यवाद!

n#p|p>n=0|p<n=sum$map((n-p)#)[1..p+1]|1<2=1
(#1)

पुराना संस्करण।

t n p|p>n=0|p==n=1|p<n=sum[t (n-q) q|q<-[1..p+1]]
s n=t n 1

मान की गणना करने वाला फ़ंक्शन s, यहां पाए गए पुनरावर्ती सूत्र का कार्यान्वयन है: https://oeis.org/A005169


एक बग: पुनरावर्ती कॉल है t (n-p) q। गोल्फ युक्तियाँ: के लिए एक infix ऑपरेटर का उपयोग करें t, गार्ड स्वैप और mapसूची समझ के बजाय का उपयोग करें n#p|p>n=0|p<n=sum$map((n-p)#)[1..p+1]|1<2=1:। sबन जाता है s=(#1), लेकिन आपको मुख्य फ़ंक्शन को बिल्कुल भी नाम नहीं देना है, इसलिए (#1)यह पर्याप्त है। 48 बाइट्स।
नीमी

संकेत के लिए बहुत बहुत धन्यवाद! मैंने बस हास्केल की मूल बातें सीखना शुरू कर दिया। मैं इस बारे में जानने जा रहा हूँ कि कैसे #और $यहाँ का उपयोग पहले =)
दोष

स्पष्टीकरण का एक छोटा सा: #एक उपयोगकर्ता परिभाषित इन्फ़िक्स समारोह की तरह ही है +, *आदि इन्फ़िक्स कार्यों पूर्वनिर्धारित कर रहे हैं। $पूर्वता (कोष्ठक के अलावा) को समायोजित करने का एक और तरीका है f (g (h x))-> f$g$h xया हमारे मामले में sum(map(...)[...])-> sum$map(...)[...]
नीमी

धन्यवाद, यह जानने के लिए काफी उपयोगी है, मैं आपके स्पष्टीकरण की सराहना करता हूं!
दोष

3

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

n%i=sum[(n-j)%j|j<-take n[1..i+1]]+0^n
(%0)

स्पष्टीकरण के लिए पायथन उत्तर देखें ।

minइसके बजाय समान लंबाई take:

n%i=sum[(n-j)%j|j<-[1..min(i+1)n]]+0^n
(%0)


1

मतलाब, 115 105 बाइट्स

function F=t(n,varargin);p=1;if nargin>1;p=varargin{1};end;F=p==n;if p<n;for q=1:p+1;F=F+t(n-p,q);end;end

यहाँ पाए गए पुनरावर्ती सूत्र का कार्यान्वयन: https://oeis.org/A005169

function F=t(n,varargin);
p=1;
if nargin>1
    p=varargin{1};
end;
F=p==n;
if p<n;
    for q=1:p+1;
        F=F+t(n-p,q);
    end;
end;

1

जूलिया, 44 43 बाइट्स

f(a,b=1)=a>b?sum(i->f(a-b,i),1:b+1):1(a==b)

यह OEIS पर पुनरावर्ती सूत्र का उपयोग करता है।

व्याख्या

function f(a, b=1)
    if a > b
        # Sum of recursing
        sum(i -> f(a-b, i), 1:b+1)
    else
        # Convert bool to integer
        1 * (a == b)
    end
end

किसी और ने देखा है कि 44 के माध्यम से हड़ताल नियमित 44 है ??



0

जावास्क्रिप्ट (ईएस 6), 63

OEIS पृष्ठ पर पुनरावर्ती सूत्र को लागू करना

F=(n,p=1,t=0,q=0)=>p<n?eval("for(;q++<=p;)t+=F(n-p,q)"):p>n?0:1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.