एक रणनीतिक लड़ाई का मूल्यांकन करें


11

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

चश्मा

आपको इनपुट के रूप में स्ट्रैटेजो के टुकड़ों का प्रतिनिधित्व करने वाला एक जोड़ा मिलेगा। टुकड़े एक में से एक है "S 1 2 3 4 5 6 7 8 9 10 B"( Sस्पाई है, और Bबम हैं)। जोड़ी में से पहला हमलावर होगा, और दूसरा हमला किया जाएगा।

यहाँ एक लड़ाई के परिणाम निर्धारित करने के नियम हैं:

  • उच्च संख्या निम्न संख्या को हरा देती है ["4", "6"] -> ["6"]:।
  • यदि दोनों समान हैं, तो दोनों मर जाते हैं ["7", "7"] -> []:।
  • जासूस नीचे, नीचे भी कर रहे हैं 1: ["S", "2"] -> ["2"]
  • हालांकि, अगर कोई जासूस हमला करता है 10, तो जासूस जीत जाता है ["S", "10"] -> ["S"]:।
  • लेकिन सामान्य नियम अभी भी लागू होते हैं अगर 10एक ही हमला है ["10", "S"] -> ["10"]:।
  • यदि कोई बम पर हमला करता है, तो बम जीतता है ["5", "B"] -> ["B"]:।
  • हालांकि, एक खनिक (ए 3), एक बम को डिफ्यूज कर सकता है ["3", "B"] -> ["3"]:।
  • एक बम हमलावर कभी नहीं होगा।
  • एक स्पॉटर (ए 1), सामान्य तंत्र का उपयोग करके हमला कर सकता है, लेकिन वे दूसरे खिलाड़ी के रैंक को "अनुमान" करने का भी प्रयास कर सकते हैं, जिसे किसी भी संकेतन के साथ निरूपित किया जा सकता है।
  • यदि वे सही ढंग से अनुमान लगाते हैं, तो दूसरा टुकड़ा मर जाता है ["1(5)", "5"] -> ["1"]:।
  • यदि वे गलत अनुमान लगाते हैं, तो कुछ नहीं होता है ["1(3)", "5"] -> ["1", "5"]:।
  • स्पॉटर्स बम लगा सकते हैं ["1(B)", "B"] -> ["1"]:।

यह , इसलिए बाइट्स जीत में सबसे छोटा कोड है !

(आप उदाहरणों का परीक्षण-मामलों के रूप में उपयोग कर सकते हैं, क्योंकि मैं उन सभी को एक सूची में एक साथ रखने के लिए बहुत आलसी हूं)।


क्या हम क्रमशः S और B का प्रतिनिधित्व करने के लिए 0 और 11 का उपयोग कर सकते हैं?
लीक नन

@LeakyNun नहीं, इससे उन्हें रैंक करना बहुत आसान हो जाएगा।
माल्टेन

1
मुझे रैंकों के उत्क्रमण के बारे में पता था (1s सबसे अच्छा हुआ करता था, केवल जासूसों पर हमला करके पीटा जाता था, 8s खनिक थे, और 9s सबसे खराब थे), लेकिन मैंने कभी भी स्पॉटर रैंक या अनुमान-और-आप-जीत नियम के बारे में नहीं सुना। लेकिन वह सिर्फ मुझे बड़बड़ा रहा है। यहां वास्तविक रुचि के बारे में: झंडे के बारे में क्या?
msh210

1
@ msh210 मैं "Victory!"उनके लिए एक आउटपुट होने पर विचार कर रहा था , लेकिन चीजों को बहुत अधिक जटिल नहीं करना चाहता था
माल्टीसेन

क्या स्पाई किसी भी लड़ाई को जीतता नहीं है (यदि कोई हमला करता है), एक बम के अपवाद के साथ, और सभी गढ़ खो दें? और स्ट्रेटेजो नियमों का क्या सेट है? स्पॉटर्स (स्काउट) 2एस होंगे, और 1मेरे स्ट्रैटेजो गेम में कोई एस नहीं थे ... (या क्या वे चुनौती के उद्देश्य से संशोधित किए गए हैं?)
mbomb007

जवाबों:


3

हास्केल, 131 बाइट्स

यह समाधान #प्रकार के साथ एक infix फ़ंक्शन के रूप में हैString -> String -> String

इनपुट को दो स्ट्रिंग तर्कों के माध्यम से स्वीकार किया जाता है। स्पॉटर इनपुट का प्रारूप वह 1 xजगह है जहां xअनुमान लगाया जाता है। एक स्ट्रिंग के रूप में दिया जाता है। उस स्थिति में जहां दोनों इकाइयां जीवित रहती हैं, लौटे स्ट्रिंग में दोनों एक स्थान से अलग हो जाते हैं।

मेरा मूल समाधान दुर्भाग्य से खराब हो गया था और मुझे कुछ बाइट्स की लागत ठीक करनी पड़ी।

('1':' ':x)#y|x==y="1"|1>0="1 "++y
"S"#"10"="S"
"3"#"B"="3"
_#"B"="B"
x#y|x==y=[]
t@"10"#_=t
_#t@"10"=t
"S"#x=x
x#"S"=x
x#y=max x y

1

पायथन, 180 153 बाइट्स

def f(a,d,g=0):T=([[d]],[[a]]);return([[a]+[d]*(g!=d)]*(g!=0)+[[]]*(a==d)+T[d=="10"]*(a=="S")+T[1]*(d=="S")+T[a=="3"]*(d=="B")+T[int(a,36)>int(d,36)])[0]

फ़ंक्शन हमलावर, रक्षक और वैकल्पिक रूप से स्पॉटर्स का अनुमान लगाता है (यदि हमलावर स्पॉटर है तो) तर्क के रूप में। यह एक सरणी देता है जिसमें जीवित टुकड़े रहते हैं।

Ungolfed

def f(a,d,g=0):
 if g: return [a] if g==d else [a,d]
 if a==d: return []
 if a=="S": return [a] if d=="10" else [d]
 if d=="S": return[a]
 if d=="B": return [a] if a=="3" else [d]
 return [a] if int(a)>int(d) else [d]

डेमो

https://repl.it/C6Oz/2


([a,d],[a])[g==d]->[a,d][:(g!=d)+1]
लीक नून

@ लीक नन - धन्यवाद, और [a] + [d] * (g == d) अभी भी कम है।
चक मॉरिस

1

जावास्क्रिप्ट ईएस 6, 98 86 बाइट्स

(a,b,g)=>a==1?b==g?a:[a,b]:b=="B"?a==3?a:b:a=="S"?b==10?a:b:b=="S"?a:a==b?[]:+a>+b?a:b

3 आर्ग्स (हमलावर, डिफेंडर, स्पॉटर अनुमान) को स्वीकार करता है।

उदाहरण चलता है:

f("4","6")     -> "6"
f("7","7")     -> []
f("S","2")     -> "2"
f("S","10")    -> "S"
f("10","S")    -> "10"
f("5","B")     -> "B"
f("3","B")     -> "3"
f("1","5","5") -> "1"
f("1","5","3") -> ["1","5"]
f("1","B","B") -> "1"

1
यदि आपको कोई सरणी वापस करने की आवश्यकता नहीं है, तो आप मुट्ठी भर बाइट बचा सकते हैं।
नहीं है कि चार्ल्स

जब कोई स्पॉटर अनुमान नहीं लगाता है तो आपका कोड मेरे लिए सही तरीके से काम नहीं कर रहा है। f("1","10") -> ["1","10"]के बजाय "10"
अंख-मोर्पुर

0

जावास्क्रिप्ट, 179 166 160 बाइट्स

f=(a,c,b,n="")=>{if(c)if(c==b)return[a];else return[a,b];if(a==b)return[];a+b=="3B"&&(b=n);a=b=="B"?n:a;b=b=="S"?n:b;a+b=="S10"&&(a=n,b="S");return[+a>+b?a:b]}

यह फ़ंक्शन 3 तर्क लेता है - पहला हमलावर है, दूसरा स्पॉटर (उनके अनुमान) के लिए उपयोग किया जाता है और तीसरा डिफेंडर है।

सोर्ड आइकन क्लिपआर्टेस्को से आता है


0

TSQL, 162 124 बाइट्स

golfed:

DECLARE @1 varchar(2)='1',@ varchar(2)='3',@s varchar(2)='4'

PRINT IIF(@s>'',IIF(@=@s,@1,@1+','+@),IIF(@1=@,'',IIF(@1+@
IN('S10','3B')or'S'=@,@1,IIF(@='B'or'S'=@1,@,IIF(@1/1<@,@1,@)))))

Ungolfed:

DECLARE 
  @1 varchar(2)='1', -- first piece
  @  varchar(2)='3',  -- second piece
  @s varchar(2)='4'  -- spotter(only fill this value for spotters)

PRINT
  IIF(@s>'',
    IIF(@=@s,@1,@1+','+@),
      IIF(@1=@,'',
        IIF(@1+@ IN('S10','3B')or'S'=@,@1,
          IIF(@='B'or'S'=@1,@,
            IIF(@1/1<@,@1,@)))))

बेला

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