From edb3e0c86fe21d9e3194dc63fc5bde372e32ad71 Mon Sep 17 00:00:00 2001 From: klaas Date: Tue, 24 Sep 2024 16:12:36 +0200 Subject: [PATCH] =?UTF-8?q?richtige=20Python=20Datei=20eingef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sudoku.py | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 sudoku.py diff --git a/sudoku.py b/sudoku.py new file mode 100644 index 0000000..8ac5ada --- /dev/null +++ b/sudoku.py @@ -0,0 +1,69 @@ +import time + +# Das Sudoku-Startfeld +start = [ + [0, 8, 0, 0, 2, 0, 5, 6, 0], + [0, 0, 0, 1, 0, 0, 0, 0, 7], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 5, 0, 0, 9, 0, 4, 0, 8], + [0, 0, 7, 8, 0, 0, 0, 0, 3], + [0, 9, 0, 0, 1, 0, 0, 5, 0], + [2, 0, 4, 0, 0, 0, 8, 0, 0], + [0, 6, 0, 0, 8, 5, 0, 0, 0], + [0, 0, 0, 2, 0, 0, 1, 0, 0] +] + +def isfine(feld, x, y): + # Doppelte Zahl in Zeile oder Spalte prüfen + for yi in range(9): + if yi != y and feld[x][yi] == feld[x][y]: + return False + for xi in range(9): + if xi != x and feld[xi][y] == feld[x][y]: + return False + + # Neuner-Kästchen-Test + x1 = (x // 3) * 3 + y1 = (y // 3) * 3 + for xk in range(x1, x1 + 3): + for yk in range(y1, y1 + 3): + if (xk != x or yk != y) and feld[xk][yk] == feld[x][y]: + return False + + return True + +def nextone(feld, x, y): + if y == 9: + y = 0 + x += 1 + if x == 9: + return True + + if feld[x][y] > 0: + if not isfine(feld, x, y): + return False + return nextone(feld, x, y + 1) + else: + for feld[x][y] in range(1, 10): + if not isfine(feld, x, y): + continue + if nextone(feld, x, y + 1): + return True + feld[x][y] = 0 + return False + +def main(): + tstart = time.time() + + if nextone(start, 0, 0): + for row in start: + print(row) + else: + print("Nope!") + + time1 = time.time() + print(f"{tstart} - {time1} * {time.CLOCKS_PER_SEC}") + +if __name__ == "__main__": + main() +