-
Notifications
You must be signed in to change notification settings - Fork 0
/
AoC2015_01.py
65 lines (52 loc) 路 1.44 KB
/
AoC2015_01.py
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
#! /usr/bin/env python3
#
# Advent of Code 2015 Day 1
#
from aoc import my_aocd
def part_1(inputs: tuple[str]) -> int:
assert len(inputs) == 1
return len(inputs[0]) - 2 * inputs[0].count(")")
def part_2(inputs: tuple[str]) -> int:
assert len(inputs) == 1
sum_ = int()
for i, c in enumerate(inputs[0]):
if c == "(":
sum_ += 1
elif c == ")":
sum_ -= 1
else:
raise ValueError("Invalid input")
if sum_ == -1:
return i + 1
raise RuntimeError("Unreachable")
TEST1 = "(())".splitlines()
TEST2 = "()()".splitlines()
TEST3 = "(((".splitlines()
TEST4 = "(()(()(".splitlines()
TEST5 = "))(((((".splitlines()
TEST6 = "())".splitlines()
TEST7 = "))(".splitlines()
TEST8 = ")))".splitlines()
TEST9 = ")())())".splitlines()
TEST10 = ")".splitlines()
TEST11 = "()())".splitlines()
def main() -> None:
my_aocd.print_header(2015, 1)
assert part_1(TEST1) == 0
assert part_1(TEST2) == 0
assert part_1(TEST3) == 3
assert part_1(TEST4) == 3
assert part_1(TEST5) == 3
assert part_1(TEST6) == -1
assert part_1(TEST7) == -1
assert part_1(TEST8) == -3
assert part_1(TEST9) == -3
assert part_2(TEST10) == 1
assert part_2(TEST11) == 5
inputs = my_aocd.get_input(2015, 1, 1)
result1 = part_1(inputs)
print(f"Part 1: {result1}")
result2 = part_2(inputs)
print(f"Part 2: {result2}")
if __name__ == '__main__':
main()