배경
에서 님의 게임 각 턴에 플레이어가에서 한 모든 돌 사이에 제거해야합니다, 플레이어는 "더미"에서 "돌"을 제거 교대로 하나의 더미. Nim의 목표는 마지막 돌을 사용하거나 잘못 변형 된 경우 상대방이 그렇게하도록 강요하는 것이지만 전략은 거의 동일합니다.
님은 재미있는 바 게임을 만듭니다. "돌"에 성냥개비 나 동전을 사용할 수 있으며 "파일"은 일반적으로 한 줄로 배열됩니다. 아래는 1, 3, 5 및 7의 더미가있는 클래식 설정입니다.
이전에 Nim을 사용한 적이 없다면이 도전을 시도하기 전에 손을 사용해보십시오. 다음 은 "Pearls Before Swine"이라는 버전 입니다.
전략
Nim의 최적 전략은 대부분의 평신도들이 일관되게 전문가에게 잃을 정도로 이진 산술로 간단하게 설명하기에 까다 롭습니다 .
그러나 이진 XOR 연산을 수행하는 것은 어렵 기 때문에 운 좋게도 술에 취했을 때도 실시간으로 구현하기 쉬운 올바른 전략을 시각화하는 동등한 방법이 있습니다.
세 단계 만 있습니다.
- 각 라인의 "돌"을 크기가 2의 거듭 제곱 인 하위 그룹으로 정신적으로 그룹화합니다. 가능한 가장 큰 크기부터 시작합니다. 대부분의 게임에는 8, 4, 2 및 1이면 충분합니다.
- 모든 그룹이 한 쌍을 갖도록 각 그룹을 다른 라인의 쌍둥이와 일치 시키십시오.
- 이것이 가능하지 않은 경우, 한 줄에서 짝을 이루지 않은 "돌"을 제거하십시오 (이것은 항상 가능합니다-이유는 Wikipedia 링크 참조).
또는 다른 방법으로 말했다 : "단일 파일에서 석재를 제거하여 파일을 2의 거듭 제곱으로 묶으면 모든 그룹이 다른 파일의 그룹과 쌍을 이룰 수 있습니다." 2의 큰 거듭 제곱을 더 작은 거듭 제곱으로 나눌 수 없다는 경고가 있습니다.
예를 들어 다음은 위의 보드를 시각화하는 방법입니다.
이 보드는 완벽하게 균형을 이루므로 상대방이 먼저 움직이기를 원할 것입니다.
도전
Nim "piles"의 크기를 나타내는 양의 정수 목록이 제공되면 전문가가 보는 것처럼 Nim 보드의 일반 텍스트 시각화를 반환합니다.
유효한 시각화를 구성하는 것은 예제를 통해 가장 잘 설명 할 수 있지만 다음을 수행해야합니다.
- 각 "2의 거듭 제곱 하위 그룹"과 해당 쌍에 개별 문자를 할당하고 (쌍으로 묶지 않은 하위 그룹은 자격이 없음) 해당 문자를 사용하여 하위 그룹과 쌍에서 "돌"을 나타냅니다.
- 하이픈을 사용하여 짝을 이루지 않은 "돌"(즉, 전문가가 Nim을 잘못 연주하지 않을 때 제거 할 돌)을 나타냅니다
-
.
유효한 시각화를 달성하는 방법에는 여러 가지가 있으며 모두 유효합니다. 몇 가지 테스트 사례를 살펴 보겠습니다.
테스트 사례
입력 : 1, 3, 5, 7
가능한 출력 1 :
A
BBA
CCCCD
CCCCBBD
선택적으로 문자 사이에 공백과 행 사이에 빈 줄을 포함시킬 수 있습니다.
가능한 출력 2 :
A
B B A
C C C C D
C C C C B B D
입력 : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
캐릭터의 순서와 선택은 원하는대로 될 수 있습니다.
가능한 출력 1 :
G
E E
E E G
C C C C
C C C C F
B B B B D D
B B B B D D F
H H I - - - - -
A A A A A A A A I
A A A A A A A A H H
유니 코드 기호도 괜찮습니다.
가능한 출력 2 :
◎
◈ ◈
◈ ◈ ◎
△ △ △ △
△ △ △ △ ◉
◐ ◐ ◐ ◐ ◀ ◀
◐ ◐ ◐ ◐ ◀ ◀ ◉
▽ ▽ ◒ - - - - -
▥ ▥ ▥ ▥ ▥ ▥ ▥ ▥ ◒
▥ ▥ ▥ ▥ ▥ ▥ ▥ ▥ ▽ ▽
입력 : 7
규칙에 따라 모든 "단일 파일"을 완전히 제거해야합니다.
가능한 출력 1 :
-------
가능한 출력 2 :
- - - - - - -
입력 : 5, 5
가능한 출력 :
A A A A B
A A A A B
추가 규칙
- 이것은 표준 규칙을 가진 코드 골프입니다. 가장 짧은 코드가 승리합니다.
- 입력은 융통성이 있으며 편리한 목록 형식으로 가져올 수 있습니다.
- 위의 예와 같이 출력도 유연합니다. 가장 합리적인 변형이 허용됩니다. 확실치 않은 것이 있는지 물어보십시오.
["H","EE","EEH","CCCC","CCCCI","DDDDFF","DDDDFFI","AAAAAAAA","AAAAAAAA-","----------"]
AAAABBBB
으로 실제로는 유효하지 ABB
않지만 그렇지 않습니다. 그러나 출력을 읽기 어렵게 만들므로 한 줄 내에서 명시 적 규칙을 줄이는 것이 가장 좋습니다.