चॉपस्टिक्स अंक कोटे के साथ उत्परिवर्तित होते हैं


13

बुनियादी नियम (खदान से अलग)

कहानी

यह वर्ष 4579 है, मानव के पास अब 1001 उंगलियों के साथ 2 हाथ हैं। चोपस्टिक्स अंकों के आधार पर बन गए हैं। और @ डेनिस के पास और भी प्रतिनिधि हैं @ मॉर्टिन ... हाथ से खींचे गए लाल घेरे अब डाउनवोट हो गए हैं ... जॉन स्कीट ने हर SE साइट पर 2 ट्रिलियन प्रतिनिधि मार दिए हैं ... हाँ डरावना मुझे पता है

चॉपस्टिक्स एक हाथ का खेल है जिसे हल किया गया है। इसलिए इसके आसपास जाने के लिए मैंने इसे उत्परिवर्तित किया है। मैंने उँगलियों की मात्रा बढ़ा दी।

खेल के नियम

जिस तरह से यह खेला जाता है

सभी की शुरुआत 2 हाथों से होती है। प्रत्येक हाथ में 1001 उंगलियां होती हैं। साथ 1 (एक) उंगली ऊपर हर हाथ शुरू होता है प्रत्येक हाथ। अपनी बारी के दौरान आप दूसरे खिलाड़ियों को "हिट" कर सकते हैं। हिट करने के लिए आप हिट करने के लिए अपने हाथों में से 1 और हिट करने के लिए अपने हाथों में से 1 चुनते हैं। अब जो हाथ मारा गया था, उसमें उँगलियों की मात्रा थी जो पहले थी और आपके हाथ की उँगलियों की मात्रा थी।

पूर्व

P1: 1,1 P2: 1,1P1[0]हिट P2[1]। अब उंगलियाँ हैं P1:1,1 P2:1,2। अब P2[1]हिट हुआ p1[0]। उंगलियां अब पी 1: पी 3,12 हैं 1,2

यदि एक हाथ 1001 या उससे अधिक अंगुलियों तक पहुंच जाता है तो वह हाथ बाहर निकल जाता है। फिर खिलाड़ी जिसे हाथ मिल गया (अपनी बारी के लिए) "विभाजित" हो सकता है। बंटवारा तब होता है जब आप उस हाथ को उठाते हैं जो उंगलियों की मात्रा को आधा कर देता है (राउंड अप) और उन उंगलियों को दूसरे हाथ से देते हुए वापस अंदर लाएं।

पूर्व

पी 1: पी 1000,22 7,7P2[0]हिट P1[0]। स्कोर P1: 0,2P2 है 1,1P1[1]अपनी बारी के लिए विभाजन और स्कोर P1: 1,1और P2 है 7,7

खेल तब समाप्त होता है जब एक खिलाड़ी के दोनों हाथ होते हैं। विजेता द्वारा उंगलियों की राशि से अंक बनाए जाते हैं। अधिक अंक = बेहतर। हारने वाले को कोई अंक नहीं मिलता।

अन्य नियम हैं जो उपयोग किए जाते हैं लेकिन ये यहां उपयोग किए गए हैं।

हर कोई हर कोई (गोल रॉबिन) खेलता है

एंडगेम

आपके द्वारा जीते गए हर राउंड से आपके अंक। फिर हर किसी की बातों को औसत करें। अपने अंकों को औसत अंकों से विभाजित करें और अपना अंतिम स्कोर प्राप्त करें। ज्यादातर अंक जीत गए।

वास्तविक नियम

मानक कमियां

कृपया खेल को हल करने की कोशिश करें। मुझे वास्तव में इसे चलाने में सक्षम होना चाहिए: पी

सुनिश्चित करें कि बॉट तेजी से चल सकता है। राउंड की लंबाई के साथ यह निर्णय लेने में कुछ समय लगेगा

आपके प्रोग्राम में आवश्यक सभी लाइब्रेरी डिफ़ॉल्ट पाइथन लाइब्रेरी में होनी चाहिए। उन लोगों को भी सूचीबद्ध करें जिनकी आपको आयात की आवश्यकता है। आयात सिर्फ बुनियादी आयात हो जाएगा (गणित के लिए मुझे क्या करना: import math)

जवाब पायथन 3.x में काम करना चाहिए

हैंडलर

आपका बॉट एक playफ़ंक्शन के साथ अपनी स्वयं की पायथन 3 फ़ाइल होगी ।

playप्रत्येक की दो संख्याओं की दो सूचियाँ दी जाएँगी। यह संख्या इंगित करती है कि प्रत्येक हाथ पर कितनी उंगलियां हैं। पहली सूची आपके अपने हाथ की है।

यदि आप दूसरे खिलाड़ी के हाथ को मारना चुनते हैं, तो दो बिट्स की सूची लौटाएं। पहला बिट उस हाथ का सूचकांक है जिसे आप हिट करने के लिए उपयोग कर रहे हैं ( 0पहली के 1लिए, आखिरी के लिए), और दूसरा बिट उस हाथ का सूचकांक है जिसे आप प्रतिद्वंद्वी पर मार रहे हैं।

यदि आप विभाजित करना चुनते हैं, तो किसी भी अन्य सत्य मूल्य को वापस करें।

टाडा!

नियंत्रक यहाँ पाया जा सकता है । प्रत्येक बॉट को अपनी फ़ाइल में सहेजें और प्रत्येक बॉट के फ़ाइलनाम (बिना .py) को सूचीबद्ध करें botnames

अंतिम नोट:

आप और दूसरे बॉट पहले ले जा रहे बदल जाएगा। यदि खेल 100,000 (एक सौ हजार) राउंड में समाप्त नहीं होता है, तो खेल समाप्त हो जाएगा और न ही बॉट जीतता है।

नियंत्रक को हमेशा के लिए ले जाने वाली चालों के खिलाफ संरक्षित नहीं किया जाता है, लेकिन अनावश्यक ओवरहेड पर दृढ़ता से फेंक दिया जाएगा।



क्या "मानक KOTH नियम" एक कड़ी हो सकती है? और शायद "स्टैंडर्ड कमियां" भी।
ट्राइकोप्लाक्स

My handler is very simple, your bot must do it's logic then adjust the the finger scores as needed, remember!क्या, तो हम कोथ के लिए गणना कर रहे हैं?
हाइपरन्यूट्रिनो 15

@HyperNeutrino ऑप्स फिक्सिंग।
क्रिस्टोफर

4
डेनिस के पास अब मार्टिन से अधिक प्रतिनिधि हैं । हे भगवान, ये अतिरिक्त 996 उंगलियां कहाँ से आईं ?!
caird coinheringaahing

जवाबों:


6

CodingAndAlgorithms

यह उत्तर वास्तव में अब तक दूसरों के विपरीत कोडिंग और एल्गोरिदम का उपयोग करता है! संदर्भ: imgur (इससे पहले पोस्ट किए गए सभी उत्तरों को भी धड़कता है)

def play(A, B):
    if sum(A) == 1:
        return [A.index(1), B.index(max(B))]
    elif max(A) + max(B) > 1000:
        return [A.index(max(A)), B.index(max(B))]
    elif 0 in A:
        return 1
    elif 0 in B:
        return [A.index(min(A)), 1-B.index(0)]
    else:
        return [A.index(min(A)), B.index(min(B))]

मुझे वह संदर्भ मिला XD
क्रिस्टोफर

यह सिर्फ जीता। यह कभी नहीं हारा।
क्रिस्टोफर

बधाई हो! मुझे लगता है कि मुझे दूसरे स्थान पर बसना होगा। आपका कोडिंग और एल्गोरिदम मेरा से अधिक मजबूत था
मूल्य इंक

3

CautionBot

def play(s,o):
 if max(s)+max(o)>1000 and (all(s) or max(s)+min(o)<1001):
  return [s.index(max(s)),o.index(max(o))]
 else:
  return [s.index(min(s)),o.index(min(filter(bool,o)))]if all(s) else 'split'

CautionBot बहुत अधिक परेशानी पैदा नहीं करना चाहता है, इसलिए यह प्रतिद्वंद्वी के हाथों के छोटे को अपने छोटे हाथ से मारता है अगर उसके दोनों हाथ हैं, और अन्यथा विभाजित होता है। हालांकि, CautionBot कोई मूर्ख नहीं है, इसलिए यदि यह अगले मोड़ को खोए बिना विरोधियों के हाथ को बाहर निकाल सकता है, तो यह अपने सामान्य कदम के बजाय ऐसा करेगा।


अनौपचारिक रूप से यह जीत रहा है
क्रिस्टोफर

ठंडा! हम देखेंगे कि कैसे चीजें यहाँ से जाती हैं क्योंकि मुझे आश्चर्य नहीं होगा जब कोई बेहतर रणनीति विकसित करता है। मैंने सिर्फ वही लागू किया जो मुझे वनीला चोपस्टिक रणनीति के रूप में समझा गया (एक कायर बनो और अक्सर मारे जाने से बचने के लिए अलग हो जाओ) इस तरह से नए नियमों को सबसे अच्छा समायोजित किया (एक कायर बनो और मारे जाने से बचने के लिए कम मारा, बंटवारे / विलय के बाद से) आपके दोनों हाथ अवैध हैं) lol
मूल्य इंक

3

तुल्यकारक

def play(s, o):
    if not all(s):
        return 1
    else:
        return [s.index(max(s)), o.index(min(filter(bool, o)))]

यदि इक्वालाइज़र एक हाथ से गायब है, तो यह विभाजित हो जाएगा। अन्यथा, यह अपने विरोधियों को अपने सबसे बड़े हाथ से सबसे छोटे हाथ से मारता है।


इन उत्परिवर्तित नियमों के अनुसार, AFAIK आप केवल विभाजित कर सकते हैं यदि एक हाथ बाहर है।
मूल्य इंक

अरे हाँ, मैं इसे ठीक कर दूँगा।
LyricLy

"यदि इक्वालाइज़र का कोई हाथ नहीं है ..." अच्छी तरह से मेरा मतलब है कि अगर उसके हाथ नहीं हैं तो वह पहले ही हार गया है? लेकिन यह सिर्फ नाइटपैकिंग है, क्षतिपूर्ति करने के लिए मेरे +1 को ले लो
वैल्यू इंक

3

आक्रामक

def play(s, o):
    return [s.index(max(s)),o.index(max(o))]if all(s)else 1

एक और स्टार्टर बॉट, एग्रेसर प्रतिद्वंद्वी के हाथों के बड़े हिस्से को अपने हाथों से बड़ा कर देगा यदि उसके दोनों हाथ गैर-खाली हैं; अन्यथा, यह विभाजित होता है।


2

RandomBot

import random

def play(s, o):
    return [random.randint(0,1)for i in'  ']if all(s)else 1

बस चीजों को शुरू करने के लिए, यहां एक बॉट है जो एक यादृच्छिक हिट बनाता है यदि उसके हाथ दोनों गैर-खाली हैं; अन्यथा, विभाजन होता है।

गोल्फ क्यों क्योंकि: 3 नहीं


मैं ठीक कर रहा था कि
क्रिस्टोफर

@Christopher क्षमा करें, आपकी टिप्पणी नहीं देखी। --- एक बार जब आप इसे ठीक कर लेंगे तो मैं इसे हटा दूंगा ।--- मैं इसे सिर्फ इसलिए डिलीट कर दूंगा क्योंकि यह बेवकूफ xD है
HyperNeutrino

@ क्रिस्‍टोफर नोट: मैंने इसे एक वैध सबमिशन में संपादित किया है। मैं एक और समाधान भी जोड़ दूँगा; मुझे बताएं कि क्या नियंत्रक ठीक से काम नहीं करता है :)
HyperNeutrino

अच्छा उन्हें बाहर की कोशिश कर रहा है
क्रिस्टोफर

@ क्रिसटर क्या नियंत्रक ठीक से काम करता है?
हाइपरएन्यूट्रीनो

2

त्रुटि

हां, वह बॉट का नाम है।

def play(s, o):
    if max(s)+max(o)>1000:
        return [s.index(max(s)),o.index(max(o))]
    if 0 in s:return ''
    return [s.index(max(s)),o.index(min(o))]

मैं अन्य बॉट्स के साथ परीक्षण करके इस पर पहुंचा। हालाँकि यह मेरे सिमुलेशन में लगातार दूसरा है। तो बीमार अंततः एक और बॉट बना रहे हैं।

संपादित करें: मैं किसी भी बॉट को लिखने के लिए प्रतीत नहीं हो सकता है जो सावधानी बरतता है, और मेरे अतिरिक्त परीक्षण से लगता है कि यह दूसरा सबसे अच्छा है, दूसरा सबसे खराब नहीं है।


1

marathoner

मैंने "हाइपरएन्यूट्रिनो" द्वारा प्रदान किए गए एग्रीगेटर के कोड को केवल हाथों के छोटे से विरोधियों के दो हाथों से मारने के लिए दिया। यह निश्चित रूप से एक बहुत ही मूर्खतापूर्ण रणनीति है, लेकिन मैं एक चार्ट के शीर्ष पर होने को ठुकरा नहीं सकता! (हालांकि वह चार्ट नुकसान होगा)

मुझे यकीन नहीं है कि यह कोड त्रुटियों के बिना चलेगा क्योंकि मैं काम पर होने के कारण इसका परीक्षण करने में असमर्थ था। हालांकि, यह निर्दोष रूप से चलना चाहिए।

def play(s, o):
     return [s.index(min(s)),o.index(min(o))]if all(s)else 1

अच्छा पहला जवाब! आपने एक महान प्रश्न चुना: P (कोई पूर्वाग्रह नहीं)
क्रिस्टोफर

धन्यवाद :) मैं बहुत घबराया हुआ था क्योंकि मुझे यकीन नहीं था कि किसी और के कोड को ट्विक करना जैसे मैंने किया था या नहीं। मेरा मानना ​​है कि जब तक आप इसे स्पष्ट करेंगे। और मैं एक बनाने की कोशिश करने वाला था जो विरोधियों के खिलाफ सबसे बड़ा हाथ बजाएगा लेकिन हाइपरन्यूट्रिनो ने मुझे उस एक को हरा दिया! haha
जॉर्डन

हाँ। इस पर एसई ट्विकिंग कोड का अक्सर उपयोग किया जाता है: पी
क्रिस्टोफर

अच्छा जवाब! एक बात जो मैं चिंता करूँगा (अभी इसका परीक्षण नहीं कर सकता है) वह यह है कि मुझे नहीं पता कि यदि आप खाली हाथ मारने की कोशिश करते हैं या नियमों में यह कारक है तो नियंत्रक कैसे जवाब देगा।
मूल्य स्याही

1
यह इक्विलाइज़र के समान है, लेकिन इक्वलाइज़र यह सुनिश्चित करने के लिए जांच करेगा कि यह प्रतिद्वंद्वी के खाली हाथ को हिट नहीं करता है यदि मौजूद है। @LyricLy
HyperNeutrino
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.