-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathadventofcode.py
More file actions
110 lines (95 loc) · 3.51 KB
/
adventofcode.py
File metadata and controls
110 lines (95 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import argparse
import unittest
from day01.day01 import Day01
from day02.day02 import Day02
from day03.day03 import Day03
from day04.day04 import Day04
from day05.day05 import Day05
from day06.day06 import Day06
from day07.day07 import Day07
from day08.day08 import Day08
from day09.day09 import Day09
from day10.day10 import Day10
from day11.day11 import Day11
from day12.day12 import Day12
from day13.day13 import Day13
from day14.day14 import Day14
from day15.day15 import Day15
from day16.day16 import Day16
from day17.day17 import Day17
from day18.day18 import Day18
from day19.day19 import Day19
from day20.day20 import Day20
from day21.day21 import Day21
from day22.day22 import Day22
from day23.day23 import Day23
from day24.day24 import Day24
from day25.day25 import Day25
CALENDAR = {
1: {'class': Day01, 'path': './day01'},
2: {'class': Day02, 'path': './day02'},
3: {'class': Day03, 'path': './day03'},
4: {'class': Day04, 'path': './day04'},
5: {'class': Day05, 'path': './day05'},
6: {'class': Day06, 'path': './day06'},
7: {'class': Day07, 'path': './day07'},
8: {'class': Day08, 'path': './day08'},
9: {'class': Day09, 'path': './day09'},
10: {'class': Day10, 'path': './day10'},
11: {'class': Day11, 'path': './day11'},
12: {'class': Day12, 'path': './day12'},
13: {'class': Day13, 'path': './day13'},
14: {'class': Day14, 'path': './day14'},
15: {'class': Day15, 'path': './day15'},
16: {'class': Day16, 'path': './day16'},
17: {'class': Day17, 'path': './day17'},
18: {'class': Day18, 'path': './day18'},
19: {'class': Day19, 'path': './day19'},
20: {'class': Day20, 'path': './day20'},
21: {'class': Day21, 'path': './day21'},
22: {'class': Day22, 'path': './day22'},
23: {'class': Day23, 'path': './day23'},
24: {'class': Day24, 'path': './day24'},
25: {'class': Day25, 'path': './day25'}
}
def check_day(string):
day = int(string)
if 1 <= day <= 25:
return day
raise argparse.ArgumentTypeError("Invalid day (must be in [1..25] range)")
def run_day(i):
print()
print('**********************************************************************')
print('******************************* Day {:2d} *******************************'.format(i))
print('**********************************************************************')
day_dict = CALENDAR[i]
input = day_dict['path'] + '/input.txt'
day = day_dict['class'](open(input).read())
print('- Part One: ' + str(day.solve_part_one()))
print('- Part Two: ' + str(day.solve_part_two()))
print('**********************************************************************')
print()
run_test(day_dict['path'])
def run_test(path):
loader = unittest.TestLoader()
suite = loader.discover(path)
runner = unittest.TextTestRunner()
runner.verbosity = 2
runner.run(suite)
def main():
parser = argparse.ArgumentParser(description='Run Advent of Code 2017')
parser.add_argument('-d', '--day',
help='day to run (all by default)',
type=check_day)
args = parser.parse_args()
print()
print('----------------------------------------------------------------------')
print('------------------------- Advent of Code 2017 ------------------------')
print('----------------------------------------------------------------------')
print()
if args.day is None:
list(map(run_day, CALENDAR))
else:
run_day(args.day)
if __name__ == '__main__':
main()