Move puzzles back up a level
This commit is contained in:
parent
7809c38104
commit
0976ec8bb5
1 changed files with 0 additions and 0 deletions
59
puzzles.py
Normal file
59
puzzles.py
Normal file
|
@ -0,0 +1,59 @@
|
|||
#!env python3
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
'''
|
||||
Parser for puzzles in the ./puzzles directory.
|
||||
'''
|
||||
|
||||
import argparse
|
||||
import os.path
|
||||
import sys
|
||||
|
||||
euler = []
|
||||
norvig = []
|
||||
|
||||
def parse_puzzle_files(path, quiet=True):
|
||||
global euler, norvig
|
||||
|
||||
if not quiet:
|
||||
print('Parsing Euler puzzles')
|
||||
euler.extend(_get_puzzles(os.path.join(path, 'euler.txt'), quiet))
|
||||
|
||||
if not quiet:
|
||||
print('Parsing Norvig puzzles')
|
||||
norvig.extend(_get_puzzles(os.path.join(path, 'norvig.txt'), quiet))
|
||||
|
||||
def _get_puzzles(filename, quiet):
|
||||
with open(filename, 'r') as f:
|
||||
puzzles = f.readlines()
|
||||
return (_parse_puzzle(p, quiet) for p in puzzles if p)
|
||||
|
||||
def _parse_puzzle(puzzle, quiet):
|
||||
puzzle = puzzle.strip()
|
||||
if len(puzzle) == 81:
|
||||
if not quiet:
|
||||
print("Parsing '{}'".format(puzzle))
|
||||
board = (int('0' if x == '.' else x) for x in puzzle)
|
||||
return Sudoku(board=board)
|
||||
else:
|
||||
if not quiet:
|
||||
print("Skipping '{}'".format(puzzle))
|
||||
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('--library', '-l', dest='path', default='./puzzles')
|
||||
parser.add_argument('indexes', metavar='N', nargs='+', type=int)
|
||||
return parser.parse_args(args)
|
||||
|
||||
def main():
|
||||
args = parse_args(sys.argv[1:])
|
||||
parse_puzzle_files(args.path, quiet=not args.verbose)
|
||||
for i in args.indexes:
|
||||
print(args.library[i])
|
||||
return 0
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
Loading…
Add table
Add a link
Reference in a new issue