From da7d4a88f49fb526734df2c118cdc57e60c9cb05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joseph=20Hopfm=C3=BCller?= Date: Fri, 10 Feb 2023 13:24:03 +0100 Subject: [PATCH] add file to run sudokus from keggle dataset --- solve_many.py | 38 ++++++++++++++++++++++++++++++++++++++ sudoku.py | 6 +++--- 2 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 solve_many.py diff --git a/solve_many.py b/solve_many.py new file mode 100644 index 0000000..3b3025a --- /dev/null +++ b/solve_many.py @@ -0,0 +1,38 @@ +import pandas as pd +import numpy as np +from random import randrange +from sudoku import sudoku_grid + +def load_quiz(df, row): + string = df.loc[row]['quizzes'] + quiz = list(string) + quiz = [int(x) for x in quiz] + quiz = np.reshape(quiz, (9, 9)).tolist() + return (quiz, string) + +def sol_to_string(solution): + string = np.reshape(solution, [1,81]).tolist() + string = [str(x) for x in string[0]] + string = ''.join(string) + return string + +df = pd.read_csv('sudoku.csv') + +with open('solved.csv', 'a+') as f: + f.write('quizzes,solutions\n') + for row in range(len(df)): + # for row in range(100): + (quiz, string) = load_quiz(df, row) + f.write(f'{string},') + sudoku = sudoku_grid(quiz) + # print(sudoku) + while not sudoku.is_solved(): + sudoku.iterate() + # print(f'Iteration {sudoku.iteration}') + # print(sudoku) + solution = sudoku.cleanup() + string = sol_to_string(solution) + f.write(f'{string}\n') + print(f'Sudoku {row} solved!') + print(sudoku) + del sudoku \ No newline at end of file diff --git a/sudoku.py b/sudoku.py index f6daf50..2d42b07 100644 --- a/sudoku.py +++ b/sudoku.py @@ -1,7 +1,5 @@ from copy import deepcopy -from random import choice, randrange -import pandas as pd -import numpy as np +from random import choice import sys class cell(): @@ -188,9 +186,11 @@ class sudoku_grid(): current_cell.collapse(current_set) def cleanup(self): + retval = [[self.grid[i][j].solution for j in range(9)] for i in range(9)] for i in range(9): for j in range(9): self.grid[i][j].cleanup() + return retval def check_branching(self): if self.invalid_states():