विनीत सॉलिटेयर मनचला बोर्ड्स


10

मंचला बोर्ड खेल के एक परिवार का नाम है जिसमें आम तौर पर मोतियों से भरे कपों की एक श्रृंखला शामिल होती है जिसे खिलाड़ी हेरफेर करते हैं। यह चुनौती खेल के एक त्यागी संस्करण के लिए निर्धारित एक विशिष्ट नियम का उपयोग करेगी।

बोर्ड में एक छोर पर एक "टोकरी" होती है, जिसके बाद अनंत संख्या में कप होते हैं, जिनकी संख्या 1 से शुरू होती है। कुछ कपों में कुछ संख्या में मोती होंगे। यदि nवें प्याले में बिल्कुल nमोती होते हैं, तो आप इससे मोतियों को "बो" सकते हैं। बुवाई का अर्थ है सभी nमोतियों को कप से बाहर निकालना, फिर उन्हें एक कप में एक बार टोकरी की ओर जमा करना। आखिरी मनका टोकरी में जाएगा। खिलाड़ी जीतता है जब बोर्ड पर सभी मोतियों की टोकरी में होते हैं।

स्पष्ट रूप से, ऐसे कई बोर्ड हैं, जो जीतने योग्य नहीं हैं, जैसे कि दूसरे कप में ठीक एक मनका होता है। कोई कानूनी नाटक नहीं है क्योंकि 0 मोतियों के साथ सभी कप नहीं बोए जा सकते हैं, और दूसरे कप में पर्याप्त मात्रा में मोती नहीं बोए जा सकते हैं। यह स्पष्ट रूप से कोई मज़ेदार नहीं है, इसलिए आपका काम विजिबल बोर्ड बनाना होगा।

कार्य

मोतियों की संख्या का प्रतिनिधित्व करने वाले एक सकारात्मक पूर्णांक को देखते हुए गैर-नकारात्मक पूर्णांकों की एक सूची है जो उन मोतियों की संख्या का प्रतिनिधित्व करते हैं जिन्हें ऊपर वर्णित के अनुसार एक वाइन बोर्ड बनाने के लिए प्रत्येक कप में रखा जाना चाहिए। इस सूची में कोई अनुगामी शून्य नहीं होना चाहिए।

मोतियों की किसी भी संख्या के लिए, हमेशा एक जंगम बोर्ड विन्यास होता है।

प्रदर्शन

यह कैसे और 4 के इनपुट के लिए winnable बोर्ड खेलने के लिए का एक प्रदर्शन है [0, 1, 3]। winnable बोर्ड है । हम एकमात्र उपलब्ध चाल के साथ शुरू करते हैं, तीसरे कप से मोतियों को प्राप्त करने के लिए बुवाई करते हैं [1, 2, 0]। अब हमारे पास वास्तव में एक विकल्प है, लेकिन एकमात्र सही पहला कप बुवाई है, जो मिल रहा है [0, 2, 0]:। फिर हम दूसरे कप की पैदावार [1, 0, 0]बोते हैं और अंत में हम सभी खाली प्यालों को पाने के लिए पहले कप को फिर से बोते हैं।

परीक्षण के मामलों:

1 => [1]
2 => [0, 2]
3 => [1, 2]
4 => [0, 1, 3]
5 => [1, 1, 3]
6 => [0, 0, 2, 4]
7 => [1, 0, 2, 4]
8 => [0, 2, 2, 4]
9 => [1, 2, 2, 4]
10 => [0, 1, 1, 3, 5]
11 => [1, 1, 1, 3, 5]
12 => [0, 0, 0, 2, 4, 6]
13 => [1, 0, 0, 2, 4, 6]
14 => [0, 2, 0, 2, 4, 6]
15 => [1, 2, 0, 2, 4, 6]
16 => [0, 1, 3, 2, 4, 6]
17 => [1, 1, 3, 2, 4, 6]
18 => [0, 0, 2, 1, 3, 5, 7]
19 => [1, 0, 2, 1, 3, 5, 7]
20 => [0, 2, 2, 1, 3, 5, 7]

परीक्षण मामलों को उत्पन्न करने के लिए एक कार्यक्रम के साथ आने के लिए पीटरटायलर का बड़ा धन्यवाद !


जवाबों:


5

CJam (21 बाइट्स)

M{_0+0#_Wa*\)+.+}ri*`

ऑनलाइन डेमो

व्याख्या

मैंने स्वतंत्र रूप से इस पेपर में वर्णित "अनप्लेइंग" तकनीक निकाली । हम प्रेरण से साबित करते हैं कि दिए गए मोतियों की संख्या के लिए एक जीतने वाला बोर्ड है।

आधार मामला: 0 मोतियों के साथ, एकमात्र जीतने वाला बोर्ड खाली है।

आगमनात्मक कदम: यदि हम कप से बोते हैं kतो अगले कदम पर कप kखाली हो जाएगा और प्रत्येक कप के पास टोकरी में कम से कम एक मनका होगा। इसलिए हम विजेता बोर्ड से nमोतियों के साथ अनूठे विजेता बोर्ड को मोतियों के साथ n-1सबसे कम संख्या वाले खाली कप की तलाश कर सकते हैं, टोकरी से एक मनका ले सकते हैं और प्रत्येक कप से उस खाली कप के नीचे, और उन सभी को खाली कप में रख सकते हैं।

विच्छेदन

M           e# Start with an empty board
{           e# Loop
  _0+0#     e#   Find position of first 0 (appending to ensure that there is one)
  _Wa*      e#   Make array of that many [-1]s
  \)+       e#   Append the index plus 1 (since board is 1-indexed)
  .+        e#   Pointwise addition
}
ri*         e# Read integer from stdin and execute loop that many times
`           e# Format for display

9

पायथन, 42 41 बाइट्स

m=lambda n,i=2:n*[1]and[n%i]+m(n-n%i,i+1)

4

जावास्क्रिप्ट (ईएस 6), 63 37 बाइट्स

f=(n,d=2)=>n?[n%d,...f(n-n%d,d+1)]:[]

@ Orlp के पायथन उत्तर का पोर्ट। स्पष्टीकरण: iवें और उच्च कप में मोतियों की कुल संख्या पर विचार करें । इनमें से एक कप से प्रत्येक नाटक iउस कुल से मोतियों को हटा देगा । (उदाहरण के लिए, यदि i3 है, और आप पांचवें कप से खेलते हैं, तो आप उस कप में मोतियों की संख्या को पाँच तक कम कर देते हैं, लेकिन आप चौथे और तीसरे कप दोनों में से एक को भी जोड़ते हैं।) कुल इसलिए एक से अधिक होना चाहिए। का है i। अब i-1वें कप में iया अधिक मोती नहीं हो सकते हैं , इसलिए इसके लिए एक बहु को छोड़ने के iलिए बाकी मोदक मोदुलो होना चाहिए i

पिछला स्पष्टीकरण (@ xnor के लिंक से): भोली दृष्टिकोण "रिवर्स प्लेइंग" तकनीक है। यह अवलोकन का उपयोग करता है कि एक नाटक एक कप को खाली करता है, इसलिए रिवर्स प्ले प्रत्येक कप से एक बीड इकट्ठा करता है और उन्हें पहले खाली कप में डालता है, जैसे (63 बाइट्स):

f=n=>n?[...a=f(n-1),0].some((m,i)=>(m?a[i]--:a[i]=i+1)>m)&&a:[]

अब, पहले iकप पर विचार करें । इस मामले में कि उनमें से एक खाली है, रिवर्स प्लेइंग 1उन कपों की कुल संख्या में मोतियों को जोड़ देगा , जबकि इस मामले में कि उनमें से कोई भी खाली नहीं है, रिवर्स प्ले iकुल से घट जाएगा , हालांकि यह 1मोडुलो जोड़ने के बराबर है i+1। बाद nमें पहले iकप में मोतियों की राशि खेलने के बाद यह nमोदुलो के बराबर होगा i+1, या इसे दूसरे तरीके से डालेंगे , iवें कप में मोतियों की संख्या nपूर्ववर्ती कप, मोदुलो में मोतियों की राशि के बराबर होगी i+1। अब iवें कप के लिए मोतियों की संख्या खेलने योग्य नहीं हो सकती है i, इसलिए वास्तव में यह शेष मोतियों की संख्या के बराबर होगाi+1। (ध्यान दें कि मैं d=i+1कम बाइट्स का उपयोग करता हूं ।)


आप @ orlp के समाधान का उपयोग करके संस्करण में फ़ंक्शन असाइन करना भूल गए, जिससे पुनरावृत्ति को काम करने से रोका जा सके। इसके अलावा उस समाधान के बारे +में, ES6 में कोई चीज़ नहीं है?
वैल्यू इंक

@ केविनलाऊ उफ़, और यह कि बाइट काउंट में शामिल करने की परेशानी के बाद भी! लेकिन नहीं, + स्ट्रिंग संकेतन है, जब तक कि दोनों पैरामीटर संख्या या बूलियन नहीं हैं, जिस स्थिति में यह अतिरिक्त है। सौभाग्य से सरणी समझ मनमाने ढंग से सुगमता बनाते हैं।
नील

2

रूबी, 36 बाइट्स

@ Orlp के उत्तर का एक बंदरगाह क्योंकि यह मेरे लिए कहीं भी बेहतर सोचने के लिए बहुत प्रतिभाशाली है।

m=->n,i=2{n>0?[n%i]+m[n-n%i,i+1]:[]}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.