গল্ফস্ক্রিপ্ট - 56 50 49 48 41 40 38 37 অক্ষর
n%{~),{!}%\{0.@{.@+2$*@)@}/;;]}*)p;}/
দ্রষ্টব্য: এটি একাধিক লাইন ইনপুট পরিচালনা করে, দ্রুত (পরীক্ষার ক্ষেত্রে 1/8 সেকেন্ড), এবং কোনও আইনি ইনপুট ভঙ্গ করে না।
(প্রথম সংস্করণটি আমার প্রথম গল্ফস্ক্রিপ্ট প্রোগ্রামও ছিল; আমি মিস করেছি এমন কয়েকটি কৌশলগুলি নির্দেশ করার জন্য ই-বিজনেসকে ধন্যবাদ)।
এটিও একটি দরকারী শিক্ষাগত পোস্ট করার জন্য, এটি কীভাবে কাজ করে তার একটি ব্যাখ্যা এখানে। আমরা পুনরাবৃত্তি দিয়ে শুরু f(n, k) = k * (f(n-1, k) + f(n-1, k-1))। এটি সংমিশ্রণভাবে বোঝা যায় যে পার্থক্যজনক বালিতে আলাদা nআলাদা বল রাখতে kযেমন প্রতিটি বালতিতে কমপক্ষে একটি বল থাকে, আপনি kপ্রথম বলের জন্য একটি বালতি বেছে নিন ( k *) এবং তারপরে এটিতে অন্তত আরও একটি বল থাকবে ( f(n-1, k)) বা এটি হবে না ( f(n-1, k-1))।
এই গ্রিডের ফলে প্রাপ্ত মানগুলি; গ্রহণ nসারি সূচক হিসেবে এবং kকলাম সূচক হিসাবে এবং 0 থেকে উভয় সূচিবদ্ধ এটা শুরু হয়
1 0 0 0 0 0 0 ...
0 1 0 0 0 0 0 ...
0 1 2 0 0 0 0 ...
0 1 6 6 0 0 0 ...
0 1 14 36 24 0 0 ...
0 1 30 150 240 120 0 ...
0 1 62 540 1560 1800 720 ...
. . . . . . . .
. . . . . . . .
. . . . . . . .
সুতরাং প্রোগ্রামে বাঁক,
n%{~ <<STUFF>> }/
ইনপুটটিকে লাইনে বিভক্ত করে এবং তারপরে প্রতিটি লাইনের জন্য এটি মূল্যায়ন করে, স্ট্যাক লাগানো nএবং লাগানো kএবং তারপরে কল করে <<STUFF>>, যা নীচে:
),{!}%\{0.@{.@+2$*@)@}/;;]}*)p;
এটি সেই গ্রিডের প্রথম সারির প্রথম k+1এন্ট্রিগুলি গণনা করে n+1। প্রাথমিকভাবে স্ট্যাকটি হ'ল n k।
),স্ট্যাক n [0 1 2 ... k]
{!}%দেয় 0 টি n [1 0 0 ... 0]আছে যেখানে স্ট্যাক দেয় k। এটিকে শীর্ষে
\{ <<MORE STUFF>> }*নিয়ে আসে nএবং এটি আমাদের সম্পাদন করার সময়কে সংখ্যায় পরিণত করে <<MORE STUFF>>।
আমাদের স্ট্যাক বর্তমানে টেবিলের একটি সারি: [f(i,0) f(i,1) ... f(i,k)]
0.@0 টির দশকের আগে এই অ্যারে রাখে। প্রথমটি হবে jএবং দ্বিতীয়টি হবে f(i,j-1)।
{ <<FINAL LOOP>> }/অ্যারের উপাদানগুলির মধ্য দিয়ে লুপগুলি; প্রত্যেকের জন্য এটি স্ট্যাকের উপরে রাখে এবং তারপরে লুপের বডি চালায়। বাম-ওভার থেকে পপস
.@+2$*@)@নিতে ... j f(i,j-1) f(i,j)এবং ফলনের জন্য বোরিং স্ট্যাক ম্যানিপুলেশন is... j*(f(i,j-1)+f(i,j)) j+1 f(i,j)
;;]k+1 f(i,k)এবং লুপের চারিদিকে যাওয়ার জন্য প্রস্তুত, একটি অ্যারেতে সমস্ত কিছু জড়ো করে।
শেষ অবধি, যখন আমরা nটেবিলের তম সারিটি তৈরি করেছি ,
)p;শেষ উপাদানটি গ্রহণ করি, এটি মুদ্রণ করি এবং বাকী সারিটি বাতিল করি।
উত্তরসূরির জন্য, এই নীতিটিতে তিনটি 38-চর সমাধান:
n%{~),{!}%\{0.@{.@+@.@*\)@}/;;]}*)p;}/
n%{~),{!}%\{0:x\{x\:x+1$*\)}/;]}*)p;}/
n%{~),{!}%\{0.@{@1$+2$*\@)}/;;]}*)p;}/