59 lines
1.6 KiB
Python
59 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))
|