전략적 전투 평가


11

Stratego 게임에서 주요 게임 방식은 상대편을 공격 할 때입니다. 이 도전에서, 당신은 임무는이 전투 중 하나를 시뮬레이션하고 누가 살아남는지 말하는 것입니다.

명세서

Stratego 조각을 나타내는 문자열 쌍을 입력으로 얻을 수 있습니다. 조각 중 하나는 "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"]합니다.
  • 그러나 광부 (a 3)는 폭탄을 해체 할 수 있습니다 ["3", "B"] -> ["3"].
  • 폭탄은 결코 공격자가 될 수 없습니다.
  • 스 포터 (a 1)는 일반적인 메커니즘을 사용하여 공격 할 수 있지만 다른 플레이어의 순위를 "추측"하려고 시도 할 수 있습니다.
  • 그들이 올바르게 추측하면 다른 조각은 죽습니다 ["1(5)", "5"] -> ["1"].
  • 그들이 잘못 추측하면 아무 일도 일어나지 않습니다 ["1(3)", "5"] -> ["1", "5"].
  • 스포 터는 폭탄을 발견 할 수 있습니다 ["1(B)", "B"] -> ["1"].

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다!

(여기서 예제를 테스트 사례로 사용할 수 있습니다. 한 목록에 모두 포함 시키기에는 너무 게으 르기 때문입니다).


0과 11을 사용하여 S와 B를 각각 나타낼 수 있습니까?
Leaky Nun

@LeakyNun 아니요, 순위를 매기는 것이 너무 쉽습니다.
Maltysen 2016 년

1
나는 계급의 역전에 대해 알았지 만 (1은 최고 였고, 스파이를 공격했을 때만 맞았고, 8은 광부 였고, 9는 최악이었다), 나는 스 포터 등급이나 추측과 승리 규칙에 대해 들어 본 적이 없다. 하지만 그건 그냥 멍청이입니다. 여기서 실제 관심의 대상은 다음과 같습니다. 플래그는 어떻습니까?
msh210 2016 년

1
@ msh210 나는 "Victory!"그들을 위해 출력을 고려 하고 있었지만 너무 복잡하게하고 싶지 않았다
Maltysen

스파이는 폭탄을 제외한 모든 전투에서 승리하지 않고 모든 방어력을 잃지 않습니까? 그리고 이것은 어떤 전략 규칙 세트입니까? Spotters (Scouts)는 s이고 내 Stratego 게임 2에는 1s 가 없었 습니다 ... (또는 그들은 도전의 목적으로 방금 수정 되었습니까?)
mbomb007

답변:


3

하스켈, 131 바이트

이 솔루션은 #유형이 포함 된 함수의 형태입니다.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]

이 함수는 공격자, 방어자 및 선택적으로 탐지기의 추측 (공격자가 탐지기 인 경우)을 인수로 사용합니다. 남아있는 라이브 조각이 포함 된 배열을 반환합니다.

언 골프

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]
Leaky Nun

@Leaky Nun-감사합니다. [a] + [d] * (g == d)는 여전히 짧습니다.
척 모리스

1

자바 스크립트 ES6, 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".
ankh-morpork 2016 년

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 개의 인수를 취합니다. 첫 번째는 공격자이고, 두 번째는 스 포터 (추측)에 사용되며 세 번째는 수비수입니다.

칼 아이콘은 clipart.co 에서 제공


0

TSQL, 162 124 바이트

골프 :

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,@)))))

언 골프 드 :

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,@)))))

깡깡이

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.