Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 스타터가 이기기 위해 게임을 시작하기 위해 가능한 움직임의 수를 찾는 프로그램

<시간/>

Amal과 Bimal이 게임을 하고 있다고 가정합니다. 안에는 하나 이상의 초콜릿이 들어 있는 n개의 용기가 있습니다. 이 용기에는 1에서 N까지 번호가 매겨져 있으며 i번째 용기에는 count[i]개의 초콜릿이 있습니다. 이제 게임은 같습니다. 첫 번째 플레이어는 용기를 선택하고 하나 이상의 초콜릿을 가져옵니다. 그런 다음 두 번째 플레이어는 비어 있지 않은 용기를 선택하고 하나 이상의 초콜릿을 가져옵니다. 이와 같이 번갈아가며 플레이합니다. 플레이어 중 한 명이 초콜릿을 가져갈 방법이 없으면 게임에서 집니다. Amal의 차례가 첫 번째인 경우 Amal이 항상 승리하도록 첫 번째 이동을 할 수 있는 방법을 찾아야 합니다.

따라서 입력이 count =[2, 3]과 같으면 처음에 컨테이너가 [2, 3]과 같기 때문에 출력은 1이 됩니다. 이렇게 플레이할 수 있습니다.

  • Amal은 두 번째 용기에서 초콜릿 하나를 선택하므로 현재 [2, 2]
  • Bimal은 첫 ​​번째 용기에서 초콜릿 하나를 선택하므로 현재 [1, 2]
  • Amal은 두 번째 용기에서 초콜릿 하나를 선택하므로 현재 [1, 1]
  • Bimal은 첫 ​​번째 용기에서 초콜릿 하나를 선택하므로 현재 [0, 1]

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • tmp :=0
  • 카운트의 각 c에 대해 수행
    • tmp :=tmp XOR c
  • tmp가 0이면
    • 0을 반환
  • 그렇지 않으면
    • 움직임 :=0
    • 카운트의 각 c에 대해 수행
      • 이동 :=이동 + ((tmp XOR c)
    • 반환 동작

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def solve(count):
   tmp = 0
   for c in count:
      tmp ^= c

   if not tmp:
      return 0
   else:
      moves = 0
      for c in count:
         moves += (tmp^c) < c
      return moves

count = [2, 3]
print(solve(count))

입력

[2, 3]

출력

1