Clean up puzzles.py interface
This commit is contained in:
		
							parent
							
								
									a7dda24015
								
							
						
					
					
						commit
						1186305712
					
				
					 1 changed files with 20 additions and 21 deletions
				
			
		
							
								
								
									
										41
									
								
								puzzles.py
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										41
									
								
								puzzles.py
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							|  | @ -8,22 +8,16 @@ import argparse | ||||||
| import os.path | import os.path | ||||||
| import sys | import sys | ||||||
| 
 | 
 | ||||||
| from sudoku import Sudoku | from sudoku import Sudoku, solvers | ||||||
| from sudoku.solvers import backtracker |  | ||||||
| 
 | 
 | ||||||
| euler = [] | euler = [] | ||||||
| norvig = [] | norvig = [] | ||||||
| 
 | 
 | ||||||
| def parse_puzzle_files(path, quiet=True): | def parse_puzzle_library(path, quiet=True): | ||||||
|     global euler, norvig |  | ||||||
| 
 |  | ||||||
|     if not quiet: |     if not quiet: | ||||||
|         print('Parsing Euler puzzles') |         print('Parsing puzzles in {}'.format(path)) | ||||||
|     euler.extend(_get_puzzles(os.path.join(path, 'euler.txt'), quiet)) |     puzzles = _get_puzzles(path, quiet) | ||||||
| 
 |     return puzzles | ||||||
|     if not quiet: |  | ||||||
|         print('Parsing Norvig puzzles') |  | ||||||
|     norvig.extend(_get_puzzles(os.path.join(path, 'norvig.txt'), quiet)) |  | ||||||
| 
 | 
 | ||||||
| def _get_puzzles(filename, quiet): | def _get_puzzles(filename, quiet): | ||||||
|     with open(filename, 'r') as f: |     with open(filename, 'r') as f: | ||||||
|  | @ -44,23 +38,28 @@ def _parse_puzzle(puzzle, quiet): | ||||||
| 
 | 
 | ||||||
| def parse_args(args): | def parse_args(args): | ||||||
|     parser = argparse.ArgumentParser() |     parser = argparse.ArgumentParser() | ||||||
|     parser.add_argument('--euler', '-e', dest='library', action='store_const', const=euler, default=None) |     parser.add_argument('--solver', '-s', default=None, | ||||||
|     parser.add_argument('--library', '-l', dest='path', default='./puzzles') |                         help='The solver to use to solve this puzzle.') | ||||||
|     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('--solver', '-s', default=None) |                         help='Print extra information when parsing puzzle libraries.') | ||||||
|     parser.add_argument('--verbose', '-v', action='store_true', default=False) |     parser.add_argument('library', | ||||||
|     parser.add_argument('indexes', metavar='N', nargs='+', type=int) |                         help='A library file containing puzzles, one per line.') | ||||||
|  |     parser.add_argument('indexes', metavar='N', nargs='+', type=int, | ||||||
|  |                         help='0-based indexes of puzzles in the library') | ||||||
|     return parser.parse_args(args) |     return parser.parse_args(args) | ||||||
| 
 | 
 | ||||||
| def main(): | def main(): | ||||||
|     args = parse_args(sys.argv[1:]) |     args = parse_args(sys.argv[1:]) | ||||||
|     parse_puzzle_files(args.path, quiet=not args.verbose) |     puzzle_library = list(parse_puzzle_library(args.library, quiet=not args.verbose)) | ||||||
|     for i in args.indexes: |     for i in args.indexes: | ||||||
|         puzzle = args.library[i] |         puzzle = puzzle_library[i] | ||||||
|         print(puzzle) |         print(puzzle) | ||||||
|         if args.solver is not None: |         if args.solver is not None: | ||||||
|             if args.solver == 'backtracking': |             try: | ||||||
|                 puzzle.solve(backtracker.solve) |                 solver = getattr(solvers, args.solver) | ||||||
|  |                 puzzle.solve(solver.solve) | ||||||
|  |             except AttributeError: | ||||||
|  |                 print('No solver named {}'.format(args.solver)) | ||||||
|             print(puzzle) |             print(puzzle) | ||||||
|     return 0 |     return 0 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue