रॉक-पेपर-कैंची प्रतियोगिता सिम्युलेटर


9

आपने यह पता लगाने के लिए रॉक-पेपर-कैंची चैंपियनशिप आयोजित करने का फैसला किया कि कौन सबसे अच्छा है। आप भाग्य को विजेता का फैसला करने नहीं देना चाहते हैं, इसलिए हर किसी को प्रतियोगिता से पहले आपको लिखित रूप में अपनी रणनीति देनी होगी। आप साधारण चीजों को भी पसंद करते हैं इसलिए एक प्रतियोगी (रॉक, पेपर या कैंची दिखाने) की एक चाल को केवल पिछले मोड़ (RvR, RvP, RvS, PvR, PvP, PvS, SvR, SvP या SvS) पर आधारित होना चाहिए। पहले मोड़ में एक खिलाड़ी को एक निश्चित चिन्ह दिखाना होता है।

आपने चैंपियनशिप अनुकरण करने के लिए एक कार्यक्रम (या फ़ंक्शन) लिखने का फैसला किया।

प्रतियोगिता का विवरण

  • कम से कम 2 प्रतियोगी होंगे।
  • हर खिलाड़ी हर किसी के साथ ठीक एक मैच खेलता है।
  • एक मैच 7 राउंड तक चला।
  • हर राउंड में विजेता को 2 अंक मिलते हैं और हारने वाले को कोई नहीं मिलता। टाई की स्थिति में दोनों खिलाड़ी 1 अंक प्राप्त करते हैं।
  • एक मैच में एक खिलाड़ी का स्कोर मैच के मोड़ पर उसके अंकों का योग होता है।
  • चैंपियनशिप में खिलाड़ियों का फाइनल स्कोर सभी मैचों में उनके अंकों का योग है।

इनपुट का विवरण:

  • आपका कार्यक्रम या फ़ंक्शन N10 वर्ण लंबे तार प्राप्त करता है , उनमें से प्रत्येक खिलाड़ी की रणनीति से मेल खाता है। सभी वर्ण (निचले हिस्से) r pया sअर्थ हैं कि दिए गए स्थिति में खिलाड़ी रॉक पेपर या कैंची दिखाएगा।
  • पहला अक्षर पहले टर्न कोड (उस प्रतियोगी के लिए हर मैच में) को कोड करता है। दूसरा दिखाता है कि अगर आखिरी राउंड रॉक बनाम रॉक होता तो क्या होता। अगले आरवीपी, आरवीएस, पीवीआर, पीवीपी, पीवीएस, एसवीआर, एसवीपी और एसवीएस हैं जहां पहला अक्षर खिलाड़ी का संकेत है और दूसरा प्रतिद्वंद्वी का है। उदाहरण के rrpsrpsrpsलिए, खिलाड़ी रॉक के साथ शुरू होता है और फिर प्रतिद्वंद्वी के अंतिम कदम की नकल करता है।
  • आप स्ट्रिंग की सूची को अपनी भाषा के सूची / सरणी या समान डेटा या एक स्ट्रिंग के रूप में इनपुट कर सकते हैं। उत्तरार्द्ध मामले में किसी प्रकार का विभाजक चरित्र होना आवश्यक है।

आउटपुट का विवरण:

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

उदाहरण:

इनपुट: ['rrpsrpsrps', 'rpppsprrpr']

आउटपुट: 5 9(चालू हैं rvr rvp pvs svp pvr rvp pvs)

इनपुट: ['rrpsrpsrps', 'rpppsprrpr', 'ssssssssss']

आउटपुट: 13 17 12(मैच 5-9पहले (2 बनाम 2 वें), 8-6(1 बनाम 3 जी) और 8-6(2 वां 3 जी))

यह कोड-गोल्फ है इसलिए सबसे छोटी प्रविष्टि जीतती है।


नंबरफाइल से प्रेरित? ;-)
जकूज़ी

क्या दूसरा उदाहरण सही है? मुझे लगता है कि 1 के साथ तीसरे के खिलाफ 1 हारता है 6-8और दूसरे के साथ तीसरे के खिलाफ हारता है 6-8
जकुबे

@ जाकुब ने सही उदाहरण दिया। धन्यवाद।
रैंडमरा

जवाबों:


2

पायथन 2: 201 188 वर्ण

def f(Q):c=lambda m:'rps'.index(m);l=len(Q);r=[0]*l;i=0;exec'p,q=i/l,i%l;m,n=c(Q[p][0]),c(Q[q][0]);exec"r[p]+=(p!=q)*(m+1-n)%3;m,n=c(Q[p][m*3+n+1]),c(Q[q][n*3+m+1]);"*7;i+=1;'*l*l;return r

कार्यक्रम का तर्क: मैं संख्या को पत्र परिवर्तित ( r=0, p=1, s=2)। mपहले nकी संख्या है, दूसरे व्यक्ति की संख्या है। क्योंकि खेल चक्रीय है, (m-n)%3पहले से ही परिणाम निर्धारित करता है। और हां, मैं एक के बाद एक परिणाम बदल सकता हूं f=(m+1-n)%3। अब का f=0अर्थ है, दूसरा खिलाड़ी qजीतता है, f=1मतलब टाई होता है, और f=2, पहला खिलाड़ी pजीतता है। यह पहले से ही खिलाड़ी 1 के लिए स्कोर है। इसलिए मुझे केवल (p!=q)*(m+1-n)%3प्रत्येक खिलाड़ी के लिए सभी मूल्यों को जोड़ने की आवश्यकता है ।

इसके साथ परीक्षण करें print f(['rrpsrpsrps', 'rpppsprrpr', 'ssssssssss'])

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.