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

Python에서 Lotus 및 Caterpillar 게임에서 승리하는 데 필요한 예상 이동 수를 찾는 프로그램

<시간/>

n개의 행과 m개의 열이 있는 그리드가 있다고 가정합니다. Amal과 Bimal은 그 그리드에서 게임을 하고 있습니다. 게임 규칙은 아래와 같습니다 -

Amal은 흰색 연꽃 기와를 맨 윗줄 어딘가에 놓고 Bimal은 애벌레 기와를 맨 아래 줄 어딘가에 놓습니다. Amal이 게임을 시작하고 그들은 번갈아가며 플레이합니다. Amal은 자신의 타일을 현재 셀의 그리드 내부에 있는 8개의 인접한 셀 중 하나로 이동할 수 있지만 Bimal의 애벌레 타일은 그리드 내부에서 왼쪽이나 오른쪽으로만 이동하거나 같은 위치에 머무를 수 있습니다. Amal의 목표는 가능한 한 적은 수의 이동으로 Bimal을 잡는 것이며 Bimal(애벌레 타일 포함)은 가능한 한 오래 생존해야 합니다. 그들이 무작위로 두 개의 기둥을 선택하여 연꽃과 애벌레를 놓으면 우리는 Amal이 이 게임에서 승리하는 데 필요한 예상 이동 수를 찾아야 합니다.

따라서 입력이 n =5 m =7과 같으면 출력은 4.571428571428571이 됩니다.

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

  • r :=0
  • 0 ~ m - 1 범위의 l에 대해
    • 온도 :=n - 1.0
    • l>=n이면
      • 온도 :=온도 + (l - n + 1) * ((l - 1) / m)
    • l
    • 온도 :=온도 + (m - n - l) * ((m - l - 2) / m)
  • r :=r + 온도 / m
  • 반환 r
  • 예시

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

    def solve(n, m):
       r = 0
    
       for l in range(m):
          temp = n - 1.0
          if l >= n:
             temp += (l - n + 1) * ((l - 1) / m)
          if l < m - n:
             temp += (m - n - l) * ((m - l - 2) / m)
          r += temp / m
    
       return r
    
    n = 5
    m = 7
    print(solve(n, m))

    입력

    5, 7
    

    출력

    4.571428571428571