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

Pythonでk日後の刑務所の独房の状態を見つけるプログラム


バイナリリスト(リスト内の1と0)と別の値kがあるとします。 numsの各値は、刑務所の独房の状態を表します。1は占有されたセルを示し、0は空のセルを示します。セルに2つの隣接するセルがあり、両方が占有されているか、両方が空である場合、そのセルは毎日占有されます。それ以外の場合は、空になります。したがって、k日後の刑務所の独房の状態を見つける必要があります。

したがって、入力がnums =[1、0、1、0、0、0、0、0] k =1のような場合、出力は[0、1、1、0、1、1、1になります。 0]、最初と最後のインデックスは2つのネイバーを持つことができないため、占有できないことがわかります。

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

  • 関数next_day_state()を定義します。これは細胞を取ります
  • new_cells:=セルのコピー
  • new_cells [0]:=0、new_cells [7]:=0
  • 1〜6の範囲のjについては、
    • cells[j-1]がcells[j+ 1]と同じ場合、
      • new_cells [j]:=1
    • それ以外の場合、
      • new_cells [j]:=0
  • return new_cells
  • メインの方法から次の手順を実行します。
  • 見た:=新しい地図
  • フラグ:=False、i:=0
  • i
  • ns:=next_day_state(cells)
  • nsが表示されない場合は、
    • 見たとおりにnsをマーク
  • それ以外の場合、
    • フラグ:=True
    • ループから抜け出す
  • セル:=ns
  • i:=i + 1
  • フラグがtrueの場合、
    • N:=N mod(表示されたアイテムの数)
    • i:=0
    • i
    • ns:=next_day_state(cells)
    • i:=i + 1
    • セル:=ns
  • セルを返す
  • 理解を深めるために、次の実装を見てみましょう。

    import copy
    class Solution:
       def next_day_state(self, cells):
          new_cells = copy.copy(cells)
          new_cells[0] = 0
          new_cells[7] = 0
          for j in range(1, 7):
             if cells[j - 1] == cells[j + 1]:
                new_cells[j] = 1
             else:
                new_cells[j] = 0
          return new_cells
    
       def solve(self, cells, N):
          seen = dict()
          flag, i = False, 0
    
          while i < N:
             ns = self.next_day_state(cells)
             if tuple(ns) not in seen:
                seen[tuple(ns)] = True
             else:
                flag = True
                break
             cells = ns
             i += 1
    
          if flag:
             N = N % len(seen)
             i = 0
             while i < N:
                ns = self.next_day_state(cells)
                i += 1
                cells = ns
          return cells
    
    ob = Solution()
    nums = [1, 0, 1, 0, 0, 0, 0, 0]
    k = 1
    print(ob.solve(nums, k))

    入力

    [4, 7, 2, 5], 6

    出力

    [0, 1, 1, 0, 1, 1, 1, 0]

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

      順序付けられたポイントのリストが2D平面上の単純なポリゴンエンドポイントを表すとします。このポリゴンの領域を見つける必要があります。 したがって、入力がpoints =[(0、0)、(0,5)、(3、5)、(3,0)]のような場合、出力は15になります。 これを解決するには、次の手順に従います- 関数getInfo()を定義します。これにはx1、y1、x2、y2が必要です return x1 * y2-y1 * x2 メインの方法から、次の手順を実行します N:=ポイントのサイズ (firstx、firsty):=points [0] (prevx、prevy):=(fir

    2. Pythonでマージした後も、最小数の色を見つけるプログラムが残っています

      色のリスト(R、G、B)があるとします。これで、2つの異なる色が隣り合っている場合、それらは3番目の色の単一の色のアイテムに変換できます。そのような変換の可能なシーケンスの後に残っているそれらの最小数を見つける必要があります。 したがって、入力がcolors =[G、 R、 G、 B、 R]の場合、以下のように変換できるため、出力は1になります- これを解決するには、次の手順に従います- n:=色のサイズ 色に異なる色が1つしかない場合は、 return n n <=1の場合、 return n x:=0 d:=キーと値のペアを持つマップ{( R、1)、(