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

Pythonで有効な数独


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

  • 各行には、繰り返しなしで1〜9の数字が含まれている必要があります。
  • 各列には、繰り返しなしで1〜9の数字が含まれている必要があります。
  • グリッドの9つの(3x3)サブボックスのそれぞれには、繰り返しなしで1〜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
これは有効です。

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

  • 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を返す
例(Python)

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

class Solution(object):
   def isValidSudoku(self, board):
      """
      :type board: List[List[str]]
      :rtype: bool
      """
      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. C++で有効な数独

    数独と呼ばれる9×9のマトリックスを与えたとしましょう。タスクは、指定された数独パターンが有効かどうかを確認することです。 一般的に、数独ボードは次のようになります 数独のルール − すべての行には、1〜9の範囲の数値が含まれています すべての列には、1〜9の範囲の数字が含まれています。 3×3の各ブロックには一意の番号が含まれています。 特定の行に同じ番号を付けることはできません。 特定の列に同じ番号を付けることはできません。 例 入力-1 − sudoku[]=    [["3","5&q

  2. Pythonで複数の値を返しますか?

    Python関数は複数の値を返すことができます。これらの値は、変数に直接格納できます。関数は変数を返すように制限されていません。0、1、2、またはそれ以上の値を返すことができます。 これは、C++やJavaなどの他の多くのプログラミング言語では使用できない複数の値/変数を返すPythonのデフォルトのプロパティです。 関数から複数の値を返す場合は、要件に応じてタプル、リスト、またはディクショナリオブジェクトを返すことができます。 方法1:タプルを使用する def func(x):    y0 = x+ 1    y1 = x * 3   &