58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
#!/usr/bin/env python3
|
|
# Eryn Wells <eryn@erynwells.me>
|
|
|
|
'''
|
|
Parser for puzzles in the ./puzzles directory.
|
|
'''
|
|
|
|
import sudoku
|
|
|
|
|
|
euler = []
|
|
norvig = []
|
|
|
|
|
|
def parse_euler(filename='./puzzles/euler.txt'):
|
|
with open(filename, 'r') as f:
|
|
puzzle_lines = f.readlines()
|
|
|
|
for puzzle in puzzle_lines:
|
|
# Chop the newline
|
|
if puzzle[-1] == '\n':
|
|
puzzle = puzzle[:-1]
|
|
print('Parsing puzzle: {}'.format(puzzle))
|
|
if len(puzzle) != 81:
|
|
continue
|
|
kwargs = {}
|
|
for idx in range(len(puzzle)):
|
|
sq = puzzle[idx]
|
|
if sq not in '1234567890.':
|
|
continue
|
|
sq_int = 0 if sq == '.' else int(sq)
|
|
x, y = int(idx % 9), int(idx / 9)
|
|
if sq_int != 0:
|
|
kwargs[sudoku.Board.xy_kwargs_key(x, y)] = sq_int
|
|
euler.append(sudoku.Board(**kwargs))
|
|
|
|
|
|
def parse_norvig(filename='./puzzles/norvig.txt'):
|
|
with open(filename, 'r') as f:
|
|
puzzle_lines = f.readlines()
|
|
|
|
for puzzle in puzzle_lines:
|
|
# Chop the newline
|
|
if puzzle[-1] == '\n':
|
|
puzzle = puzzle[:-1]
|
|
print('Parsing puzzle: {}'.format(puzzle))
|
|
if len(puzzle) != 81:
|
|
continue
|
|
kwargs = {}
|
|
for idx in range(len(puzzle)):
|
|
sq = puzzle[idx]
|
|
if sq not in '1234567890.':
|
|
continue
|
|
sq_int = 0 if sq == '.' else int(sq)
|
|
x, y = int(idx % 9), int(idx / 9)
|
|
if sq_int != 0:
|
|
kwargs[sudoku.Board.xy_kwargs_key(x, y)] = sq_int
|
|
norvig.append(sudoku.Board(**kwargs))
|