diff --git a/2022/day_2/data.txt b/2022/day_2/data.txt new file mode 100644 index 0000000..787ae71 --- /dev/null +++ b/2022/day_2/data.txt @@ -0,0 +1,2500 @@ +B Y +A Z +A Z +C Z +B Y +B Y +B X +B Z +C Z +B X +B Y +A Z +B Y +B Z +B Y +C Z +B Z +B Y +B Z +C Y +B Y +A Z +B Y +B Y +B Y +C Y +A Z +B Y +B X +A Z +B X +A Z +A Z +B Y +B Y +B X +A Z +B Y +B Z +C X +C X +B Y +B Y +B X +B X +C X +B X +A Z +B Y +B Y +C X +A Z +B Y +B Z +B X +B X +A Z +A X +B Y +B Y +B Z +C Z +B Z +B Z +B Z +A Z +A Z +B X +B X +B Y +B X +B X +C Z +C Z +A Z +A Y +A Z +B Z +A Z +B Y +C X +B X +C X +B Z +B Z +C Z +B Z +B X +C X +A Z +C X +B Z +A Y +C Z +B Y +C Y +B X +A X +B Y +B X +B X +B Z +B Y +A Z +B Z +B Y +B Y +A X +A Z +B X +B X +B X +B X +B Z +B Z +B Y +C X +A Z +A Z +B Y +B Z +B Y +A Z +B Z +A Z +A Z +C X +B Z +A Z +A Z +B Y +B Z +A Z +B Y +B Y +A Z +B Y +C X +B Z +B Y +B X +C X +B X +B X +B X +A Z +A Z +C Y +A Z +B Y +A Z +C X +B Z +B Z +C X +B Y +C X +B X +B X +C X +A Z +B Y +C X +B X +B Y +A Z +B Y +B Y +C X +B Y +C X +A Z +A Z +A Z +B Y +B Y +A X +A Z +A Z +B Y +C X +C Y +B Y +C X +A Z +B X +A Z +A Z +C X +B Y +A Z +B Y +C X +A Z +B X +B Y +A Z +B Y +B X +B X +C X +B Y +C Y +A Z +B Y +B Y +C Y +B Y +C Y +C X +A Y +A Y +B Z +B Y +A Z +B Z +B X +B X +B Y +A Z +B Y +B X +B Y +B Y +C Z +B Y +B Y +A Z +A Z +B Z +A Y +C X +B Y +B Y +B Z +B Z +B Y +C X +B Y +B X +B Z +B Y +B X +B Y +C Z +B Y +B X +A Z +B Z +B Z +A Z +C X +B Y +C Z +A Z +B Y +C Z +B Y +B X +B Y +B X +C Z +B Z +A Z +A Z +A Z +A X +B Z +B Y +B X +B Y +A Z +B Z +C Z +B X +B Z +B Z +A Z +B Y +B X +A Z +A Z +B Y +B X +A Z +A Z +C Z +A Z +C Z +B Y +B Y +B Z +C X +A Z +B X +B Y +B X +B Y +B Y +B X +B Z +B X +C Z +C X +C X +A Z +A Z +B X +B X +A Y +C X +B Y +A Y +B Z +B X +A Z +B X +B Y +B Y +B Y +B Y +A Z +A Z +B Y +B X +C Z +B Z +C X +B Z +B Y +C X +A Z +B Y +A Z +A Z +B Z +B Y +B X +A Z +B X +B Y +A Z +B Z +B X +B X +A Z +C Y +B X +A Z +B X +B Y +C X +B Y +C Z +C X +B Y +B Y +B Y +B X +B Y +B X +A Y +A Z +B Z +B Y +B X +B Z +B Y +C Z +B Y +A Z +B X +A Z +C X +A X +B Z +B Z +C X +A Z +B X +A Z +A Z +B Z +A Z +B Y +B Z +C Z +A Y +A Z +A Z +A Z +C X +B Z +B Z +B Y +B X +B Y +B Y +B Y +B Z +B Y +B Y +A Z +B Z +A Z +C X +B Y +B X +B Y +B X +B Y +B Y +C X +B Y +B Y +B Z +B Y +C X +B Y +B X +B Y +C X +A X +A Z +C Z +B Y +C Z +B X +C Z +C X +C Z +B Y +B Y +C X +C X +B Y +C X +A Y +B Y +B X +B X +B Z +B Y +C Y +C X +B X +B Y +B Z +B X +B Z +B Z +C X +B X +B Y +B Z +B X +C Z +A Y +B Y +B Y +B Y +A Y +C Y +B Y +B Z +B Z +B Y +B Y +B Z +B X +B X +B Y +A Z +C Y +C Z +B Y +B X +B Y +B Y +C X +B Y +C X +A Z +B X +C X +C Z +A Z +A Z +B Y +C X +A Z +A Z +B Y +A Y +B Y +A Z +A Z +B X +C X +A Z +B X +B Z +A Z +A Z +B X +B Y +B X +B Z +B Y +B Y +B Z +C X +C X +B Y +A Z +B X +B X +B Y +B Z +B Y +B X +B Z +B X +B Y +C X +B Y +B Y +C Y +A Z +B Y +B X +B Y +A Z +C X +A Z +A X +B Z +B X +A Z +B Y +B X +B X +A Z +B Y +A Z +B Z +B Y +A Z +B Y +B Y +A Z +B Z +C Z +B Y +B Y +C Y +A Z +B Y +B Y +B Y +B Y +B Z +B Y +B Y +B Y +C X +B Z +B X +A Z +B Z +C X +B Y +B Y +A Z +B Y +B X +A Z +A Z +C Z +B X +B X +B Y +B Z +B Z +B Z +B Y +B Y +B Y +B Y +B Z +B Y +A Z +A Y +A Z +B Y +B Y +A Z +B X +B Y +A Z +C Z +B Z +B Z +B Y +A Z +A Z +B Y +B X +B Z +B X +B Y +B Y +B X +C X +B Z +B X +A Z +B Y +C Z +B X +A Z +C Z +C Z +A Z +B Y +B Y +A Y +B Y +C Z +B X +C X +B Y +B X +B Z +B Y +B Z +B Y +B Y +A Z +B X +B X +A Y +B Z +B X +B Z +A Y +B Z +C X +B X +B X +B Z +B X +C Y +B Y +C X +C X +B Z +B X +C Z +B Z +A Z +C Y +B Y +B Y +B X +B Z +B Y +B Y +B X +C X +B Y +B Y +C Y +B Z +C X +A Z +B X +B X +B Z +B X +B Y +A Z +B Z +B X +A Z +B Y +C X +A Y +A Z +C X +B X +B Z +B X +C X +A Z +B X +B Y +B Y +A Z +B Z +C X +A Z +B Z +C X +B X +A Z +C X +C Z +B Y +B Z +B Y +B X +C Z +B Z +B Z +B Y +A Z +C Z +A Y +B Y +C X +B Y +B Z +A Z +B Z +A Z +B X +C X +B Y +A Z +B Y +B X +C Z +B Z +C X +B Y +B X +C Y +B Y +C X +B Y +B Y +B Y +B Z +B Y +B X +B Y +B Y +A Z +A Z +C X +B Z +B Y +A Z +B X +C X +B Y +B X +A Z +C Z +A Z +B Z +B Y +B X +B Z +B Y +A Z +C X +C Z +A Y +A Z +C X +C Y +C Z +B Y +B X +B Z +B Y +B X +B Y +A Z +B Y +C X +B X +B Y +C Z +B Y +B Y +B Y +B X +B Y +C Z +B X +B Y +B Y +B Z +B X +B X +B Z +B Z +A Z +A Z +C X +B Y +B Y +C X +B Y +B X +A Y +C Z +B Y +B Z +B Y +B Y +A Z +B Y +B Z +B Y +B Z +B X +B Z +B Y +A Z +B X +B Z +B Y +B Y +B Z +B Y +A Z +B X +B Y +B Z +B X +B Y +B X +B X +B Y +B X +C Y +B Z +B Y +B Z +C Y +A Z +B Y +A Z +B X +A Z +A Z +C Z +B X +C Y +A Z +B Z +B Z +B X +B Z +B Y +A Z +B Z +C Z +A Z +C Y +A Z +B Y +A Z +B Y +A Z +B X +A Z +B Z +C X +B Y +B Y +B Y +C X +B Z +C X +A Z +A Z +C X +B Y +B Z +B X +B Y +B X +A Z +B Y +B Y +A Z +B Y +B Z +B Z +B X +B Z +B Y +B X +B Y +B Y +C X +C Z +B Y +B Y +B Y +B Z +B Y +B Y +B Y +A Z +B Y +B X +B Y +B X +B Z +B Y +B X +B X +A Y +B Y +B X +B Y +B Y +B Y +B Z +B X +A Z +B Y +B Y +B Y +A Z +B X +B X +C Z +B Y +B Y +A Z +B Y +B Z +B X +C X +B Y +B Y +C X +C Z +B X +A Z +B Y +B Y +B X +B X +B X +B Y +B Y +A Z +A Z +B Y +B Y +A Z +B Z +A Z +C X +C X +B Y +B Y +A Z +A Z +C Z +B Z +B X +A Z +B X +B Y +B Y +B X +B Y +B Y +C Z +B Y +B X +C Z +C Z +B X +B Y +B Y +B Z +A Z +B Y +B Y +B Y +B X +B X +A Z +A Z +B X +B Y +B Z +B Y +B Z +B Y +B Z +C X +B Y +C X +B Y +B Y +C Y +A Z +B X +C Z +B Y +B Z +B Y +B Y +B Y +C X +B X +B Y +A Z +C Y +B Y +A Z +B Y +B Z +B Z +B Y +B Y +B Y +C X +B Y +A Y +C Y +B X +B X +B X +B X +B Z +B X +B Z +B Y +B Y +A Z +B X +B X +A Z +A Y +B Y +B Z +B Y +C X +B Y +B X +B Z +C X +B Z +B Y +B X +B X +A Z +B Y +B Y +B Y +C X +A X +B X +C X +B X +C X +B X +A X +B Y +B Y +B Y +B Y +B Z +C Y +C X +A Z +B Z +B Z +B Y +B Z +B Y +B Y +B X +B Z +A Z +A Z +B Z +B X +B Z +A Z +B Y +B Y +B Y +B Z +A Y +B X +B Z +B Y +B Y +B Y +B Y +C X +B Z +C X +A Z +A Z +B Z +A Y +C X +B X +B X +C X +A Z +A Z +A Z +B Y +B Z +A X +A X +B Y +C X +A Z +B Z +A Z +B Y +B Y +B X +B X +B Y +C X +B Z +B Y +B X +B X +B Y +B Z +B Y +B Y +B X +B X +B X +B Y +C X +B Y +B Y +B X +B Y +B Y +B X +B X +A Z +C X +B X +A Z +B Y +B Y +B Z +B Y +B X +A Z +C Y +B X +B Z +B Y +C X +A Z +B X +A Z +A Z +B Y +B Z +B Y +A Z +B Y +B Z +A Z +C Z +B Y +B Y +B X +B Z +B Y +B X +B X +B Y +B Z +B X +B Y +C Z +A X +B Y +C X +A X +B X +B X +B Z +A X +B X +B Y +B X +A Z +B Z +C Z +B X +B X +A Z +B X +B X +B Z +B Y +B Y +A Z +B Y +B Y +B X +B X +B X +B Y +A Y +C X +B X +A Z +B X +B Y +C Z +B Y +B Y +A Z +B Y +A Z +B Y +A Z +B Y +B Y +A Z +B X +B X +B Y +B Y +B Y +A Z +B Y +B Y +A Z +B X +A X +A Z +B Y +B X +B Z +B Z +B Y +B Y +C Y +B Y +B Y +B X +B Y +A Z +C X +B Z +B X +B Z +A Z +B Y +B Z +B X +A Z +A Z +C X +B X +A Y +C X +B Z +B Z +C Z +B Z +B Z +C Y +A Z +C Z +A Z +C Z +B Z +B Y +C X +B Y +B X +A Z +C Y +B X +B Y +B Y +B X +B Y +A Z +A Z +B Y +B Z +B Y +C X +B X +B Y +B X +A Z +C X +B Y +B Y +B Y +B Y +C Z +B Y +C Z +A X +C Z +B X +B Y +B Y +B X +B Y +C X +C X +A Z +B Y +B Y +C X +B Z +C Y +B Z +B Z +B Z +B X +B X +B X +B Z +B X +C X +B Y +C X +B X +C Z +B Y +B X +B Z +B Y +B Y +B Y +B Y +B Y +B X +B X +A Z +B Y +B X +B Y +B Y +A Y +B Y +B Y +A Z +A Z +C Z +B X +B Y +B Y +B Z +C Z +C X +A Z +C X +A X +B X +B Z +B Y +A Z +C Z +B Y +C Z +B X +A Z +B X +A Z +B Y +A Y +B Y +B Y +A Z +C X +B X +B Y +A Z +B Z +B Y +B X +B X +C Y +B X +A Z +B Z +A Z +C X +C Y +B Z +B Z +A Z +B X +B Y +B X +C X +B Y +B Y +B X +C X +B X +B Y +B X +B Y +B Z +B Y +B X +B X +A Z +B Y +B Y +C X +C Y +C X +A Z +A Z +B X +B X +B Z +A Z +A Z +C Z +B Z +A X +B X +B Y +B Y +A Z +B Y +B X +B X +B X +B Y +B X +B Y +B Y +B Y +B Y +B Y +B Y +B Z +A Z +B Y +B X +C X +A Y +B Y +B Y +B Z +C Z +B X +C X +B Z +B Y +B Y +B X +B X +B X +A Z +B X +A Y +B Y +B Y +C X +A Z +B Y +C X +B Y +B X +B X +B X +C Z +B X +A Z +B Y +B Y +B Y +A Z +A Z +B X +A Y +B Y +B Y +B Y +B X +B X +B Z +B X +B Z +B X +B Y +A Y +A Z +C Y +B Z +C X +B Z +B Y +B X +A Y +B Y +B X +B Y +B X +C Z +B X +C Z +B Y +B X +B Z +A Y +A Y +C Z +B X +B X +B Y +A Z +B Y +B Z +A Z +B X +B X +B X +B X +B X +B Z +A Z +A Z +C Y +C X +A Z +A Z +C X +B X +B X +B Z +B X +A Z +B Y +B X +B Y +C X +A Z +B Z +C X +B Y +B Y +A Z +B Y +B Y +B X +B Y +C Y +B X +B Z +B Y +A Z +B Z +A Y +B Y +A Z +B X +B Y +A Z +B Y +C Z +B Z +B Y +C X +C X +B X +B Z +B Y +B Z +B Z +B Z +B Z +A Z +B Y +B X +B Z +B Y +B X +A Z +A Z +A Z +B Y +C Y +C Z +B Z +B X +B Y +B Z +B Y +A Z +A Z +C Z +B X +B Y +B Z +B X +A Y +A Y +B Y +A Y +B Z +B Y +A Z +B Y +B Y +B Y +C Z +B X +B Z +B X +B Y +B Y +B Y +C X +B X +B Y +B Z +B X +B Y +B Y +B Y +B X +B X +B X +A Z +B Y +B Y +C X +C X +C X +C X +B Z +A Z +A Z +B Z +B Y +B X +A Z +C Z +B Y +B X +C Z +C X +B X +B Y +B Y +B X +B X +B Y +A Z +B X +B X +B X +B Y +A Y +B X +A Z +B Y +B Y +B Y +C Y +B Z +B X +B Z +C X +B Y +B Z +C X +B X +B X +B Y +B Y +B Y +A Z +A Z +A Z +B Y +B X +C Z +B Z +B Y +B Y +B Y +B Y +B Z +C X +A Z +C Z +B Z +B X +B X +A Z +B X +B Z +A Z +B Y +B Y +A Z +B Y +B Y +C Y +C Z +B X +A Z +B Z +B Y +C Z +C X +B X +A Z +B Y +B Z +B X +A Z +A Z +A Z +B Y +B X +C X +B Z +B Z +B X +B X +B Y +A Z +B X +B X +B Z +A Z +C X +B X +B Y +B Z +A Z +B Y +B Y +B Y +C X +B Z +A Y +A Z +B Z +C X +A Z +A Z +B Y +C X +B Y +B Z +C X +B Y +B Y +A Z +B Z +A Z +C Z +A Z +B X +B Z +A Z +B X +B Y +C Z +A Y +B Y +B Y +B Y +A Z +B Z +A Y +A Z +B Z +B Y +B Y +A Y +B Y +C X +B Z +B Z +A Z +B X +B X +A Z +B Z +C Y +A Z +A Z +B Y +B Z +B X +C Y +B Y +B Y +B Z +B Y +B Z +B X +B X +B Y +B Y +C X +C X +B X +B X +C X +A Z +B Y +C Z +A Z +B X +B Y +B Z +A Z +C Y +A Z +B Z +A Z +C X +C X +B X +B X +B Y +B Y +B Y +B Y +B Z +B X +B Z +C Y +B Y +A Z +B Y +B X +A Y +B Y +B Z +C X +B X +A Z +A Z +B Y +B Y +A Z +C X +B X +B Y +B Y +B Z +A Z +A Z +C Z +A Z +B Y +B Y +B Y +A Z +B Z +B Y +A Z +A Y +B Y +B Y +B Z +A X +A Z +B Z +B X +A Z +B Z +B Y +B Y +B X +A Y +C Y +B Y +B Y +B X +B Z +A Z +B X +B X +B Y +B Y +A Z +B X +C X +B X +B X +A Z +B Y +C X +A Z +B X +C Z +A Z +B Y +B Y +B X +B X +A Z +C Z +B X +B X +B Y +A Z +B Y +B Y +B X +B Y +B X +A Z +B Y +B Z +B X +A Z +B Y +C Z +C X +A Z +A Y +B X +B Z +B Y +B Y +B Y +B Z +B Z +A Y +C X +B X +C X +B Y +B Y +B Z +B Y +C Y +C X +B Z +C X +B Y +B X +B Y +B Y +A Z +B Y +A Z +A Z +A Z +A Z +B Y +A Z +B X +B X +B X +C Z +B Z +C Y +B Y +A Z +B Z +B Y +B Y +B Y +A Z +B Z +C Y +C X +B Y +B Y +B Y +B X +B Y +B Z +A Z +B Y +B Y +C Y +B Z +B X +B Y +B X +B Z +B Y +C Y +C Y +A Z +B X +B X +A Y +B Z +A Z +B Y +B X +B X +B Z +B X +A Z +B Y +C X +C X +B Z +A Z +B Y +B Y +B Y +B Y +B Y +B X +B Y +B Y +B Z +B Z +A X +A Z +A Z +A Z +A Y +C X +B Y +B Z +B X +A Z +B Y +B Y +B X +B Y +B Y +C Y +C Y +B X +A Z +B Y +C X +B Y +A Y +B X +B X +B Y +C X +A Z +B Y +B X +C X +C Z +B Y +B Y +B Y +A Z +B X +A Z +C Z +B Z +B Y +B Y +B X +B Y +B Y +B X +A Z +C X +C Z +B X +B Y +C Y +B X +A Z +B Y +A Z +B Y +A Y +A Z +A Z +B Y +B Y +B Z +C Z +C X +B Y +B Z +B Y +A Z +B Y +B Z +B Y +B X +B Y +B Z +B Y +B Z +C X +B Y +B Y +C Z +A Z +B Y +C X +B X +A Y +B Y +A Z +B Y +B X +B Y +B Y +B X +B X +B X +B Y +B Y +C Z +B Z +C X +C Z +B Y +C X +B X +A Z +B Y +C Z +A Y +B Y +B Y +B Y +C X +B X +B Y +B Y +B Z +C X +B X +B Z +A Z +B X +B Z +B X +A Z +B Y +B Z +C X +B X +C X +B X +B Y +B Z +B Z +B Z +A Z +B Y +B X +B Y +B Y +B X +B Z +B Y +C X +A Z +B Z +B X +A Z +B Y +B Y +B Y +A Z +A Z +C X +B X +A Y +B Y +B Y +B Y +A Z +A Z +A Z +C Y +B Z +A Y +B Y +B X +B X +B Y +C X +B Y +C Z +B Y +A X +B Y +B X +B Y +B X +C Z +B Y +B Z +B X +B Z +A Z +B Y +B X +B Y +A Z +B X +C Y +B X +B Y +B Y +B Y +C X +B Y +B Y +B Y +A Z +B Z +C X +A Z +B Y +C Y +B X +A Z +C Z +B X +B Y +B X +C Z +B X +B Z +C Y +B X +B Y +B X +B Z +B X +B Z +B Y +B Z +B X +A Z +B X +A X +B X +B Y +B Y +B Y +A Z +B Y +B Y +B Z +C X +B Y +B Y +B Y +B X +B X +B X +C Z +B Z +B X +A Z +B Y +B Z +B Y +B Y +B Y +B Y +C X +A Z +B Z +B Y +B Y +B Z +A Z +B Y +B Z +B Y +B Y +C Y +A Z +B Z +C X +B X +C Z +B X +B X +B Y +B Y +A X +B Y +C Z +A Z +B X +C Z +C Z +B X +A Z +B X +C Z +B Z +B Y +B Y +C X +A Z +B X +B Y +B X +B X +B X +B Y +C X +B Z +B Y +B Y +B Y +B X +A Z +A Z +B Y +B Z +B Y +A Z +B Y +B X +A Z +B Z +B Y +B X +B Y +A Y +B Y +B Y +B Y +B Z +B X +B Y +C Z +C X +B Y +C Y +B Z +A Z +A Z +B Y +B Y +A Z +B Z +B Y +B X +A Z +A Z +C X +A Z +C X +A Z +B Y +C X +B X +B X +B Y +A Y +B Y +B Z +B X +B Y +B Y +A Z +B X +B Y +A Z +A Y +A Z +C X +A Z +C X +A X +B Y +B Y +A Z +B X +B Z +B Y +B Y +B Z +B Y +B Y +B X +B Y +C X +C X +B Y +B Y +B X +C Z +C Z +C Z +C X +B Y +C Z +A Z +C Z +B Y +A Z +B Z +B X +A Y +B Y +B Y +B X +B Y +B Y +C X +B Y +A Z +B Y +A Z +C Z +A Z +B Y +B Z +A Z +B X +B X +B Z +B X +B Y +A Z +B Y +C X +A Z +C Z +B X +A Z +B Y +B Y +C Z +B Z +A Z +B Y +B X +B Y +B Z +C Z +A Y +A Z +B X +B X +A Z +C Y +B Y +A X +A Z +B X +B Y +B X +A Z +C X +B Y +B Y +C X +A X +B Y +A Z +A Z +B Y +B Z +B Y +B Y +B Y +B X +B Y +B X +B X +B X +B Y +A Z +C X +A Z +A Z +A X +A Z +B X +B Z +B Y +A Z diff --git a/2022/day_2/demo.txt b/2022/day_2/demo.txt new file mode 100644 index 0000000..db60e36 --- /dev/null +++ b/2022/day_2/demo.txt @@ -0,0 +1,3 @@ +A Y +B X +C Z diff --git a/2022/day_2/part1.py b/2022/day_2/part1.py new file mode 100644 index 0000000..997896c --- /dev/null +++ b/2022/day_2/part1.py @@ -0,0 +1,33 @@ +ahand = ("A", "B", "C") +bhand = ("X", "Y", "Z") +win_tbl = ( + ("A", "Y"), + ("B", "Z"), + ("C", "X"), +) + +def load(filename): + with open(filename) as f: + t = 0 + for l in f: + a, b = l.rstrip().split(" ") + h = bhand.index(b) + 1 + + ai = ahand.index(a) + bi = bhand.index(b) + + if ai == bi: + t += h + 3 + + elif (a, b) in win_tbl: + t += h + 6 + + else: + t += h + + return t + +assert load("demo.txt") == 15 +t = load("data.txt") +print(f"You have {t} points.") + diff --git a/2022/day_2/part2.py b/2022/day_2/part2.py new file mode 100644 index 0000000..c9e8ead --- /dev/null +++ b/2022/day_2/part2.py @@ -0,0 +1,38 @@ +ahand = ("A", "B", "C") +bhand = ("X", "Y", "Z") +win_tbl = { + "A": "B", + "B": "C", + "C": "A", +} + +defeats_tbl = { + "A": "C", + "B": "A", + "C": "B", +} + + +def load(filename): + with open(filename) as f: + t = 0 + for l in f: + a, b = l.rstrip().split(" ") + + if b == "X": + h = ahand.index(defeats_tbl[a]) + 1 + t += h + + elif b == "Y": + h = ahand.index(a) + 1 + t += h + 3 + + elif b == "Z": + h = ahand.index(win_tbl[a]) + 1 + t += h + 6 + + return t + +assert load("demo.txt") == 12 +t = load("data.txt") +print("Total points: ", t)