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

数独グリッドを検証するプログラムは、Pythonで解決可能かどうか


9×9の数独グリッドが1つあるとします。それが有効か今かを確認する必要があります。次のルールに従って、塗りつぶされたセルのみを検証する必要があります-

  • 各行には、繰り返しなしで1〜9の数字が含まれている必要があります。

  • 各列には、繰り返しなしで1〜9の数字が含まれている必要があります。

  • グリッドの9(3-3)サブボックスのそれぞれには、繰り返しなしで1-9の数字が含まれている必要があります。

数独グリッドが-

のようなものだとします

数独グリッドを検証するプログラムは、Pythonで解決可能かどうか

これは有効です。

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

  • 0から8の範囲のiの場合

    • row、col、block、row_cube:=3 *(i / 3)、col_cube:=3 *(i mod 3)

      という空の辞書を作成します。
    • 0から8の範囲のjの場合

      • board [i、j]が空白でなく、board [i、j]が連続している場合は、falseを返します

      • row [board [i、j]]:=1

      • board [j、i]が空白でなく、board [j、i]が列にある場合は、falseを返します

      • col [board [j、i]]:=1

      • rc:=row_cube + j / 3およびcc:=col_cube + j mod 3

      • ブロック内のboard[rc、cc]およびboard [rc、cc]が空白でない場合は、falseを返します

      • block [board [rc、cc]]:=1

  • trueを返す

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

class Solution(object):
   def isValidSudoku(self, board):
      for i in range(9):
         row = {}
         column = {}
         block = {}
         row_cube = 3 * (i//3)
         column_cube = 3 * (i%3)
         for j in range(9):
            if board[i][j]!='.' and board[i][j] in row:
               return False
            row[board[i][j]] = 1
            if board[j][i]!='.' and board[j][i] in column:
               return False
            column[board[j][i]] = 1
            rc= row_cube+j//3
            cc = column_cube + j%3
            if board[rc][cc] in block and board[rc][cc]!='.':
               return False
            block[board[rc][cc]]=1
         return True
ob1 = Solution()
print(ob1.isValidSudoku([
["5","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".","8",".",".","7","9"]]))

入力

[
["5","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".","8",".",".","7","9"]]

出力

True

  1. Pythonでヒープが最大ヒープを形成しているかどうかを確認するプログラム

    ヒープツリーを表すリストがあるとします。私たちが知っているように、ヒープは完全な二分木です。要素が最大ヒープを形成しているかどうかを確認する必要があります。最大ヒープについて知っているように、すべての要素はその子の両方よりも大きくなります。 したがって、入力がnums =[8、6、4、2、0、3]のような場合、すべての要素が子よりも大きいため、出力はTrueになります。 これを解決するには、次の手順に従います- n:=numsのサイズ 0からn-1の範囲のiの場合、do m:=i * 2 num:=nums [i] m + 1

  2. 指定された文字列がキーワードであるかどうかを確認するPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −数値が与えられているので、その数値が2の累乗であるかどうかを確認する必要があります。 キーワードは、特定の用途で任意の言語によって予約されている特別な単語であり、識別子として使用することはできません。 指定された文字列がキーワードであるかどうかを確認するために、以下で説明するようにキーワードモジュールを使用しました。 例 # keyword module import keyword # Function def isKeyword(word) :    # list of all