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

Pythonで漕ぎ手を壊すゲームの勝者を見つけるためのプログラム


配列の高さがあるとします。高さの異なるn個の異なる塔があります。アマルとビマルはゲームをしています。ゲームのルールは以下のとおりです

  • アマルは常に最初にプレイします

  • 各移動中に、現在のプレーヤーは高さXの塔を選択し、それぞれ高さZのY個の異なる塔に分解します。 [Y * Z =X; XおよびY>1]

  • 動きのない人は誰でもゲームに負けます

勝者の名前を見つける必要があります。

したがって、入力がheight =[3,1,2]のような場合、初期の高さは{3,1,2}であるため、出力はBimalになります。アマルがタワー2の高さを高さ1の2つのタワーに分割すると、新しい高さの配列は{3,1,1,1}になり、ビマルは高さ3のタワーを分割して、高さ1のタワーを3つ作成できるため、アマルには移動するため、Bimalが勝ちます。

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

  • 関数util()を定義します。これには制限があります。初期制限値は10^3+5です
  • result:=サイズ制限の配列と0で埋める
  • 範囲2のiの場合、-1を制限します。
    • s:=新しいセット
    • 範囲1からiの平方根の床までのjについては、
      • d:=i / jの商、r:=i/jの余り
      • rが0と同じ場合、
        • jが奇数の場合、
          • 結果[d])をsに挿入
        • dが奇数の場合、
          • 結果[j]をsに挿入
    • j:=0
    • jがsに存在する間、実行します
      • j:=j + 1
      • result [i]:=j
  • 結果を返す
  • g:=util()
  • メインの方法から、次の手順を実行します-
  • r:=0
  • 身長がiごとに、
    • r:=r XOR g [i]
  • rがゼロ以外の場合、
    • 「アマル」を返す
  • それ以外の場合、
    • 「Bimal」を返す

理解を深めるために、次の実装を見てみましょう-

def util(limit=10**3+5):
   result = [0] * limit

   for i in range(2, limit):
      s = set()
      for j in range(1, int(i**0.5)+1):
         d, r = divmod(i, j)

         if r == 0:
            if j & 1:
               s.add(result[d])
            if d & 1:
               s.add(result[j])

      j = 0
      while j in s: j += 1
      result[i] = j

   return result

g = util()

def solve(height):
   r = 0

   for i in height:
      r ^= g[i]

   if r:
      return "Amal"
   else:
      return "Bimal"

height = [3,1,2]
print(solve(height))

入力

[3,1,2]

出力

Bimal

  1. Pythonでポリゴンの周囲を見つけるプログラム

    順序付けられたポイントのリストが2D平面上の単純なポリゴンエンドポイントを表すとします。このポリゴンの周囲を見つける必要があります。 したがって、入力がpoints =[(0、0)、(0,5)、(3、5)、(3,0)]のような場合、出力は16になります。 2つの辺の長さは3で、2つの辺の長さは5なので、2 * 5 + 2 * 3=16です。 これを解決するには、次の手順に従います- 関数getInfo()を定義します。これにはx1、y1、x2、y2が必要です ユークリッド距離である((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))の平方根を返します (x1、y1)

  2. Pythonで最大の建物の高さを見つけるプログラム

    値nと、制限と呼ばれるペアの別のリストがあるとします。都市にn棟の新しい建物を建てたいと思っています。ただし、制限はほとんどありません。私たちは一列に建てることができ、建物には1からnまでのラベルが付けられています。制限には2つのパラメーターがあるため、restrictions [i] =(id_i、max_height_i)は、id_iの高さがmax_height_i以下でなければならないことを示します。新しい建物の高さに関する市の制限は次のとおりです- 各建物の高さは0または正の値である必要があります。 最初の建物の高さは0でなければなりません。 隣接する2つの建物の高さ