2017-10-08 08:26:18 -07:00
|
|
|
#!env python3
|
|
|
|
# Eryn Wells <eryn@erynwells.me>
|
|
|
|
'''
|
|
|
|
Parser for puzzles in the ./puzzles directory.
|
|
|
|
'''
|
|
|
|
|
2017-10-11 15:49:18 -07:00
|
|
|
import argparse
|
2017-10-08 08:26:18 -07:00
|
|
|
import sudoku
|
2017-10-11 15:49:18 -07:00
|
|
|
import sys
|
2017-10-08 08:26:18 -07:00
|
|
|
|
|
|
|
euler = []
|
|
|
|
norvig = []
|
|
|
|
|
2017-10-11 15:49:18 -07:00
|
|
|
def parse_puzzle_files(quiet=True):
|
2017-10-08 08:26:18 -07:00
|
|
|
global euler, norvig
|
|
|
|
|
2017-10-11 15:49:18 -07:00
|
|
|
if not quiet:
|
|
|
|
print('Parsing Euler puzzles')
|
|
|
|
euler.extend(_get_puzzles('puzzles/euler.txt', quiet))
|
2017-10-08 08:26:18 -07:00
|
|
|
|
2017-10-11 15:49:18 -07:00
|
|
|
if not quiet:
|
|
|
|
print('Parsing Norvig puzzles')
|
|
|
|
norvig.extend(_get_puzzles('puzzles/norvig.txt', quiet))
|
2017-10-08 08:26:18 -07:00
|
|
|
|
2017-10-11 15:49:18 -07:00
|
|
|
def _get_puzzles(filename, quiet):
|
2017-10-08 08:26:18 -07:00
|
|
|
with open(filename, 'r') as f:
|
|
|
|
puzzles = f.readlines()
|
2017-10-11 15:49:18 -07:00
|
|
|
return (_parse_puzzle(p, quiet) for p in puzzles if p)
|
2017-10-08 08:26:18 -07:00
|
|
|
|
2017-10-11 15:49:18 -07:00
|
|
|
def _parse_puzzle(puzzle, quiet):
|
2017-10-08 08:26:18 -07:00
|
|
|
puzzle = puzzle.strip()
|
|
|
|
if len(puzzle) == 81:
|
2017-10-11 15:49:18 -07:00
|
|
|
if not quiet:
|
|
|
|
print("Parsing '{}'".format(puzzle))
|
2017-10-08 08:26:18 -07:00
|
|
|
board = (int('0' if x == '.' else x) for x in puzzle)
|
2017-10-10 09:53:55 -07:00
|
|
|
return sudoku.Sudoku(board=board)
|
2017-10-08 08:26:18 -07:00
|
|
|
else:
|
2017-10-11 15:49:18 -07:00
|
|
|
if not quiet:
|
|
|
|
print("Skipping '{}'".format(puzzle))
|
2017-10-08 08:26:18 -07:00
|
|
|
return None
|
2017-10-11 15:49:18 -07:00
|
|
|
|
|
|
|
def parse_args(args):
|
|
|
|
parser = argparse.ArgumentParser()
|
|
|
|
parser.add_argument('--euler', '-e', dest='library', action='store_const', const=euler, default=None)
|
|
|
|
parser.add_argument('--norvig', '-n', dest='library', action='store_const', const=norvig, default=None)
|
|
|
|
parser.add_argument('--verbose', '-v', action='store_true', default=False)
|
|
|
|
parser.add_argument('index', default=0, type=int)
|
|
|
|
return parser.parse_args(args)
|
|
|
|
|
|
|
|
def main():
|
|
|
|
args = parse_args(sys.argv[1:])
|
|
|
|
parse_puzzle_files(quiet=not args.verbose)
|
|
|
|
print(args.library[args.index])
|
|
|
|
return 0
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
sys.exit(main())
|