ঝর্ণা গণনা


17

একটি ঝর্ণা সারিগুলিতে মুদ্রাগুলির বিন্যাস যাতে প্রতিটি মুদ্রা তার নীচে সারিতে দুটি মুদ্রা স্পর্শ করে বা নীচের সারিতে থাকে এবং নীচের সারিটি সংযুক্ত থাকে। এখানে একটি 21 মুদ্রা ঝর্ণা:

Http://mathworld.wolfram.com/Fountain.html থেকে


আপনার চ্যালেঞ্জটি দেওয়া সংখ্যার কয়েন দিয়ে কতগুলি বিভিন্ন ঝর্ণা তৈরি করা যায় তা গণনা করা।

আপনাকে ইনপুট হিসাবে ইতিবাচক পূর্ণসংখ্যা দেওয়া হবে n। আপনাকে অবশ্যই nবিদ্যমান বিদ্যমান বিভিন্ন- মুদ্রা ফোয়ারাগুলির সংখ্যা আউটপুট করতে হবে ।

স্ট্যান্ডার্ড আই / ও বিধি, মান লুফোলগুলি নিষিদ্ধ। সমাধানগুলি n = 10এক মিনিটের মধ্যে গণনা করতে সক্ষম হওয়া উচিত ।


এর জন্য পছন্দসই আউটপুট n = 1 ... 10:

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

এই ক্রমটি OEIS A005169


এটি কোড গল্ফ। সবচেয়ে কম বাইট জেতা


এমন কোনও কি আছে যার nজন্য অবশ্যই প্রোগ্রামটির কাজ করার নিশ্চয়তা থাকা উচিত? (অর্থাত্ এটি ভেঙে যেতে পারে)
কুইন্টোপিয়া

@ কুইন্টোপিয়া এটি nডেটাটাইপ, হার্ডওয়্যার ইত্যাদির সীমাবদ্ধতা অবধি সবার জন্য কাজ করা উচিত
ইসাএইচজি

উত্তর:


3

পাইথন, 57 বাইট

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

ওইআইএস- তে পর্যবেক্ষণ অনুসারে , আপনি যদি প্রতিটি সারি নীচের সারির তুলনায় অর্ধেক ধাপে স্থানান্তরিত করেন তবে কলামের আকারগুলি সর্বাধিক 1 এর উপরের ধাপের সাথে ধনাত্মক পূর্ণসংখ্যার ক্রম গঠন করে।

ফাংশনটি f(n,i)যোগফল nএবং শেষ সংখ্যার সাথে ক্রমগুলি গণনা করে i। এই যাও recursively থেকে পরবর্তী কলাম আকার প্রতিটি পছন্দ জন্য সংকলিত করা যেতে পারে 1থেকে i+1, যা range(1,i+2)। ছিন্ন range(1,i+2)[:n]থাকা চেয়ে বেশি কয়েন ব্যবহার করা থেকে আটকায় কলাম, নেতিবাচক বলতে প্রয়োজন এড়ানো nএর দিতে 0। তদ্ব্যতীত, এটি একটি স্পষ্ট বেস কেস এড়িয়ে চলে, যেহেতু খালি সমষ্টিটি 0এবং পুনরাবৃত্তি হয় না, তবে পরিবর্তে f(0)সেট করা দরকার 1, যার জন্য or 1যথেষ্ট হবে (যেমন হবে +0**n)।


M|sgL-Gd<ShHG1gQ0
পাইথের

5

গণিত, 59 বাইট

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

জিন-ফরাসোয়াইস অ্যালকোভারের ওইআইএসে ম্যাথামেটিকা ​​প্রোগ্রাম ভিত্তিক।


আপনি কি এটি সূত্র হিসাবে আবার লিখতে পারেন (আমি যে সূত্রটি পেয়েছি তার সাথে কেবল তুলনা করতে চাই)? আমি কেবল গণিত =) পড়তে পারি না
flawr

@ ফ্লোয়ার সিকোয়েন্স তৈরির ফাংশনটি হ'ল 1/(1-x/(1-x^2/(1-x^3/(1-x^4/(1-x^5/(...))))))
আলেফাল্ফা

ব্যাখ্যার জন্য ধন্যবাদ, যদি আপনার এমন পাওয়ারফুল সিএএস = থাকে তবে এটি অবশ্যই একটি দুর্দান্ত পদ্ধতির
flawr

3

হাস্কেল, 60 48 বাইট

একটি উপায় সংক্ষিপ্ত সমাধান সরবরাহ করার জন্য @ নিমিকে ধন্যবাদ!

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। Golfing টিপস: একটি পোতা অপারেটর ব্যবহার t, রক্ষিবাহিনী অদলবদল এবং ব্যবহার mapতালিকা ধী পরিবর্তে: n#p|p>n=0|p<n=sum$map((n-p)#)[1..p+1]|1<2=1sহয়ে যায় s=(#1), তবে আপনাকে মূল ফাংশনটির কোনও নাম দিতে হবে না, তাই (#1)যথেষ্ট। 48 বাইট।
নিমি

ইঙ্গিতগুলির জন্য আপনাকে অনেক ধন্যবাদ! আমি কেবল হাস্কেলের বেসিকগুলি শিখতে শুরু করেছি। আমি তার সম্পর্কে #এবং $এখানে প্রথম ব্যবহারের
পদ্ধতিটি

ব্যাখ্যা একটি সামান্য বিট: #একটি ব্যবহারকারী সংজ্ঞায়িত পোতা ফাংশন শুধু ভালো হয় +, *ইত্যাদি পোতা ফাংশন পূর্বনির্ধারিত করছে। $অগ্রাধিকার সামঞ্জস্য করার আরেকটি উপায় (বন্ধনী ছাড়াও) f (g (h x))-> f$g$h xবা আমাদের ক্ষেত্রে sum(map(...)[...])-> sum$map(...)[...]
নিমি

আপনাকে ধন্যবাদ, এটি জানার জন্য বেশ দরকারী, আমি আপনার ব্যাখ্যাটির প্রশংসা করি!
flawr

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

পাইথন 3, 88 বাইট

f=lambda n,p:sum([f(n-p,q)for q in range(1,p+2)])if p<n else int(p==n)
t=lambda n:f(n,1)

0

জাভাস্ক্রিপ্ট (ES6), 63

ওইআইএস পৃষ্ঠায় পুনরাবৃত্ত সূত্রটি কার্যকর করা

F=(n,p=1,t=0,q=0)=>p<n?eval("for(;q++<=p;)t+=F(n-p,q)"):p>n?0:1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.