আমরা একটি নির্দিষ্ট সংখ্যায় একটি বিনকে বলগুলি রাখছি । এই বাক্সগুলি খালি শুরু হয়।
Empty bin (a=4): 0 0 0 0
এবং একে একে আমরা বিনগুলিতে বল যোগ করি।
0 0 0 1 or
0 0 1 0 or
0 1 0 0 or
1 0 0 0
বিনগুলি যে সমস্ত সম্ভাব্য রাজ্যগুলি ডুপ্লিকেট ছাড়াই এবং কোনও অনুপস্থিত ছাড়াই গ্রহণ করা যায় সেগুলি লুপ করার জন্য আমাদের দ্রুত উপায় প্রয়োজন এবং আমরা সম্ভাব্য সমস্ত বিনগুলি গণনা করতে চাই না। সুতরাং পরিবর্তে আমরা প্রতিটি বিন-কনফিগারেশনকে একটি সূচি নির্ধারণ করি।
সম্ভাব্য কনফিগারেশনগুলিকে নির্দিষ্ট উপায়ে বাছাই করে আমরা সূচিটি নির্ধারণ করি:
- যোগফল অনুসারে বাছাই করুন: সুতরাং প্রথমে
0 0 0 0
, তারপরে 1 বল যুক্ত সম্ভাব্য কনফিগারেশনগুলি, তারপরে 2 ইত্যাদি etc. তারপরে প্রথম বিন থেকে শেষ অবধি প্রতিটি যোগফলের মধ্যে বাছাই করুন:
0 0 0 2 0 0 1 1 0 0 2 0 0 1 0 1 0 1 1 0 0 2 0 0 etc
এরপরে সূচকটি এই তালিকার মাধ্যমে আরোহণের জন্য নির্ধারিত হয়:
0 0 0 0 -> 1 0 0 0 1 -> 2 0 0 1 0 -> 3 0 1 0 0 -> 4 1 0 0 0 -> 5 0 0 0 2 -> 6 0 0 1 1 -> 7 0 0 2 0 -> 8 0 1 0 1 -> 9 0 1 1 0 -> 10 0 2 0 0 -> 11
বিধি
একটি ফাংশন বা প্রোগ্রাম তৈরি করুন যা অ-নেতিবাচক পূর্ণসংখ্যার সাথে কোনও আকারের একটি তালিকা নেয় এবং তার সূচকটি মুদ্রণ বা আউটপুট করে। আপনি অনুমান করতে পারেন একটি অন্তত 2. সংক্ষিপ্ততম কোড জয়ী হতে হবে। আপনি 0-ইনডেক্সড আউটপুট বা 1-ইনডেক্সেড ব্যবহার করতে পারেন তবে আপনি কোনটি ব্যবহার করবেন তা নির্দিষ্ট করুন। নোট: সমস্ত উদাহরণ এখানে 1-ইনডেক্সড।
উদাহরণ কোড
গল্ফড নয়, আর তে:
nodetoindex <- function(node){
a <- length(node)
t <- sum(node)
if(t == 0) return(1)
index <- choose(t-1 + a, a)
while(sum(node) != 0){
x <- node[1]
sumrest <- sum(node)
if(x == 0){
node <- node[-1]
next
}
a <- length(node[-1])
index <- index + choose(sumrest + a, a) - choose(sumrest - x + a, a)
node <- node[-1]
}
return(index + 1)
}
পরীক্ষার মামলা
10 10 10 10 -> 130571
3 1 4 1 5 9 -> 424407
2 9 -> 69
0 0 0 -> 1
0 0 1 -> 2
0 0 0 0 0 0 -> 1
1 0 0 0 0 1 -> 23