-
Notifications
You must be signed in to change notification settings - Fork 0
/
solve.py
81 lines (58 loc) · 2.16 KB
/
solve.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from argparse import ArgumentParser
from os import path
from re import fullmatch
from sudoku.classic import SudokuLP
from sudoku.x import SudokuXLP
from sudoku.four_square import FourSquareSudokuLP
from sudoku.four_pyramid import FourPyramidSudokuLP
from window.classic import Sudoku
from window.x import SudokuX
from window.four_square import FourSquareSudoku
from window.four_pyramid import FourPyramidSudoku
from detail.load import load
if __name__ == "__main__":
options = {
"sdk": (SudokuLP, Sudoku),
"sdkx": (SudokuXLP, SudokuX),
"sdkfs": (FourSquareSudokuLP, FourSquareSudoku),
"sdkfp": (FourPyramidSudokuLP, FourPyramidSudoku)
}
argparser = ArgumentParser(
description="Solving Variations on Sudoku Puzzles")
argparser.add_argument(
"-l", "--load",
help="a file representing an unsolved sudoku problem",
required=True
)
argparser.add_argument(
"-s", "--save",
help="where to save the linear programming formulation of the given problem",
required=False
)
argparser.add_argument(
"-f", "--force",
help="do not prompt before overwriting",
action="store_true"
)
argparser.add_argument(
"-d", "--debug",
help="enable debugging mode",
action="store_true"
)
args = argparser.parse_args()
if args.load and not path.exists(args.load):
raise ValueError(f"'{args.load}' does not exist")
extension = path.splitext(args.load)[1][1:]
if extension not in options:
raise ValueError(f"'{extension}' files are not supported")
problem = options[extension][0](load(args.load))
window = options[extension][1](problem, debug=args.debug)
if args.save:
if path.exists(args.save) and not args.force:
answer = input(f"Would you like to overwrite '{args.save}': ")
if not fullmatch(r"y|Y|yes|YES|", answer):
raise ValueError(
f"Failed to save the linear programming formulation as '{args.save}'")
with open(args.save, 'w', encoding="ascii") as file:
print(problem, file=file)
window.loop()