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