हम गेंदों को एक निश्चित संख्या में डिब्बे में डाल रहे हैं । ये डिब्बे खाली होने लगते हैं।
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, आदि। फिर आरोही क्रम में प्रत्येक योग के अनुसार, पहले बिन से अंतिम तक:
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-अनुक्रमित हैं।
उदाहरण कोड
गोल्फ में नहीं, R में:
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