গল্ফস্ক্রিপ্ট - 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;}/