diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2020-12-09 07:58:32 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2020-12-09 07:58:32 +0100 |
| commit | 15a72a4f3a6e7b9276f3f501f3d29ee2d92666eb (patch) | |
| tree | 82b7771b936ff9fab71c0707c1bd7f79a2218a47 /20 | |
| parent | 26654567a4abd6e19766e946f769c6061f350d32 (diff) | |
| download | aoc-15a72a4f3a6e7b9276f3f501f3d29ee2d92666eb.tar.gz | |
add driver
Diffstat (limited to '20')
| -rw-r--r-- | 20/py/d04.py | 3 | ||||
| -rw-r--r-- | 20/py/d07.py | 6 | ||||
| -rw-r--r-- | 20/py/d08.py | 7 | ||||
| -rw-r--r-- | 20/py/d09.py | 20 | ||||
| -rw-r--r-- | 20/py/driver.py | 32 |
5 files changed, 48 insertions, 20 deletions
diff --git a/20/py/d04.py b/20/py/d04.py index a0a58a1..d0387f6 100644 --- a/20/py/d04.py +++ b/20/py/d04.py @@ -77,9 +77,7 @@ def pt2(_in): want = {s for s in "byr iyr eyr hgt hcl ecl pid cid".split()} for line in _in: - print(repr(line)) if line == "\n": - print(want) if len(want) == 0 or (len(want) == 1 and "cid" in want): valid += 1 want = {s for s in "byr iyr eyr hgt hcl ecl pid cid".split()} @@ -88,7 +86,6 @@ def pt2(_in): k, v = entry.strip().split(":") if valid_entry(k, v): want.remove(k) - print(want) if len(want) == 0 or (len(want) == 1 and "cid" in want): valid += 1 return valid diff --git a/20/py/d07.py b/20/py/d07.py index 48fa3d2..f96c796 100644 --- a/20/py/d07.py +++ b/20/py/d07.py @@ -11,7 +11,7 @@ class Node: self.children = children def __iter__(self): - yield from child for child, _ in self.children + yield from (child for child, _ in self.children) def parse(_in): @@ -50,7 +50,5 @@ if __name__ == "__main__": input = open("../input/07", "r").readlines() # graph(parse(input)) - start = time.time() - print(pt2(input)) print(pt1(input)) - print(time.time() - start) + print(pt2(input)) diff --git a/20/py/d08.py b/20/py/d08.py index 550fb3b..4ebee03 100644 --- a/20/py/d08.py +++ b/20/py/d08.py @@ -27,10 +27,11 @@ def run(prog): def pt1(_in): - return run(_in)[1] + return run(parse(_in))[1] def pt2(_in): + _in = parse(_in) for i in range(len(_in)): prog = _in.copy() inst, offset = prog[i] @@ -50,9 +51,5 @@ if __name__ == "__main__": input = open(sys.argv[1], "r").readlines() else: input = open("../input/08", "r").readlines() - start = time.time() - input = parse(input) print(pt1(input)) - print("pt1 {:.3}".format(time.time() - start)) print(pt2(input)) - print("pt2 {:.3}".format(time.time() - start)) diff --git a/20/py/d09.py b/20/py/d09.py index 4379039..9950f16 100644 --- a/20/py/d09.py +++ b/20/py/d09.py @@ -7,23 +7,28 @@ def intify(_in): return list(int(n.strip()) for n in _in) -def pt1(_in): +def first_invalid(nums): valid = [] for i in range(25): for j in range(i+1, 25): - valid.append(_in[i] + _in[j]) - for i in range(25, len(_in)): - if _in[i] not in valid: - return _in[i] + valid.append(nums[i] + nums[j]) + for i in range(25, len(nums)): + if nums[i] not in valid: + return nums[i] valid = valid[24:] offset = 0 for j in range(1, 25)[::-1]: - valid.insert(offset, _in[i - j] + _in[i]) + valid.insert(offset, nums[i - j] + nums[i]) offset += j +def pt1(_in): + return first_invalid(intify(_in)) + + def pt2(_in): - invalid = pt1(_in) + _in = intify(_in) + invalid = first_invalid(_in) i, s, nums = 0, 0, deque() while s != invalid: @@ -44,6 +49,5 @@ if __name__ == "__main__": input = open(sys.argv[1], "r").readlines() else: input = open("../input/09", "r").readlines() - input = intify(input) print(pt1(input)) print(pt2(input)) diff --git a/20/py/driver.py b/20/py/driver.py new file mode 100644 index 0000000..8b0fa03 --- /dev/null +++ b/20/py/driver.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 +import sys +import time + +import d01 +import d02 +import d03 +import d04 +import d05 +import d06 +import d07 +import d08 +import d09 + + +print("day part | time | tot_time | ans") +print("---------+--------+----------+-----------") + +time_to_here = 0 +for day, mod in enumerate((d01, d02, d03, d04, d05, + d06, d07, d08, d09)): + input = open(f"../input/{day+1:02}").readlines() + for part, part_func in enumerate((mod.pt1, mod.pt2)): + times = [] + for i in range(100 if "time" in sys.argv else 5): + start = time.time() + ans = part_func(input) + ans_time = time.time() + times.append(ans_time-start) + avg_time = sum(times) / len(times) + time_to_here += avg_time + print(f"{day+1:02} {part+1} | {avg_time*1000:6.3f} | {time_to_here*1000:6.3f} | {ans}") |
