Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonでLotusandCaterpillarゲームに勝つために必要な予想される動きの数を見つけるためのプログラム


n行m列のグリッドがあるとします。アマルとビマルはそのグリッドでゲームをプレイしています。ゲームルールは以下のようになります-

アマルは一番上の列のどこかに白い蓮のタイルを置き、ビマルは一番下の列のどこかに毛虫のタイルを置きます。アマルはゲームを開始し、彼らは交互に遊んでいます。アマルは自分のタイルを現在のセルのグリッド内の8つの隣接するセルのいずれかに移動できますが、ビマルのキャタピラータイルはグリッド内で左または右に移動するか、同じ位置にとどまることができます。アマルの目標は、できるだけ少ない動きでビマルを捕まえることですが、ビマル(毛虫のタイルを使用)はできるだけ長く生き残る必要があります。彼らが蓮と毛虫を置くためにランダムに2つの列を選択した場合、アマルがこのゲームに勝つために必要な予想される動きの数を見つける必要があります。

したがって、入力がn =5 m =7の場合、出力は4.571428571428571になります。

これを解決するには、次の手順に従います-

  • r:=0
  • 0〜m-1の範囲のlの場合、do
    • temp:=n-1.0
    • l> =nの場合、
      • temp:=temp +(l --n + 1)*((l --1)/ m)
    • l
    • temp:=temp +(m --n --l)*((m --l --2)/ m)
  • r:=r + temp / m
  • return 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

    1. Pythonでi、j、k個のx、y、z文字のサブシーケンスの数を見つけるプログラム

      「x」、「y」、「z」の文字列sがあるとすると、i個の「x」文字、j個の「y」文字、続いて続くサブシーケンスの数を見つける必要があります。 k個の「z」文字(i、j、k≥1)。 したがって、入力がs =xxyzの場合、出力は3になります。これは、2つのxyzと1つのxxyzを作成できるためです これを解決するには、次の手順に従います。 n:=sのサイズ x:=0、y:=0、z:=0 0からnの範囲のiの場合、実行 カウント:=0 s[i]がxと同じ場合、 x:=x * 2 x:=x + 1 s[i]がyと同じ場合、 y:=y

    2. Pythonで繰り返される整数ゲームを削除して勝つための動きの数を見つけるためのプログラム

      2人の友人のAmalとBimalが、numsと呼ばれる番号のソートされたリストを使用してゲームをプレイしているとします。このゲームでは、1ターンで、アマルは任意の3つの数字を選択します。 Bimalはそれらの1つを削除し、次にAmalはそれらの1つを削除します。リストは奇数の要素から始まります。ここで、Amlaは、リストに繰り返し要素が含まれないようにするために必要なターン数を最小化することを望んでいます。Bimalは、ターン数を最大化することを望んでいます。アマルとビマルが最適に行動する場合、このゲームに必要なターン数を見つける必要があります。 したがって、入力がnums =[1、1、2、