전략적 전투 평가


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.