Allow selecting and printing puzzles from the library to the command line

This commit is contained in:
Eryn Wells 2017-10-11 15:49:18 -07:00
parent ab927ee41d
commit e2eadf9da7

View file

@ -4,31 +4,54 @@
Parser for puzzles in the ./puzzles directory. Parser for puzzles in the ./puzzles directory.
''' '''
import argparse
import sudoku import sudoku
import sys
euler = [] euler = []
norvig = [] norvig = []
def parse_puzzle_files(): def parse_puzzle_files(quiet=True):
global euler, norvig global euler, norvig
if not quiet:
print('Parsing Euler puzzles') print('Parsing Euler puzzles')
euler = list(_get_puzzles('puzzles/euler.txt')) euler.extend(_get_puzzles('puzzles/euler.txt', quiet))
if not quiet:
print('Parsing Norvig puzzles') print('Parsing Norvig puzzles')
norvig = list(_get_puzzles('puzzles/norvig.txt')) norvig.extend(_get_puzzles('puzzles/norvig.txt', quiet))
def _get_puzzles(filename): def _get_puzzles(filename, quiet):
with open(filename, 'r') as f: with open(filename, 'r') as f:
puzzles = f.readlines() puzzles = f.readlines()
return (_parse_puzzle(p) for p in puzzles if p) return (_parse_puzzle(p, quiet) for p in puzzles if p)
def _parse_puzzle(puzzle): def _parse_puzzle(puzzle, quiet):
puzzle = puzzle.strip() puzzle = puzzle.strip()
if len(puzzle) == 81: if len(puzzle) == 81:
if not quiet:
print("Parsing '{}'".format(puzzle)) print("Parsing '{}'".format(puzzle))
board = (int('0' if x == '.' else x) for x in puzzle) board = (int('0' if x == '.' else x) for x in puzzle)
return sudoku.Sudoku(board=board) return sudoku.Sudoku(board=board)
else: else:
if not quiet:
print("Skipping '{}'".format(puzzle)) print("Skipping '{}'".format(puzzle))
return None return None
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())