From 0be87cad79b9db25be5a5e79e402148516d3a474 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Mon, 6 Dec 2021 08:48:22 +0100 Subject: Add day 13 solutions --- 2015/13/.gitignore | 1 + 2015/13/Makefile | 8 ++++++++ 2015/13/input | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2015/13/puzzles.py | 45 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 110 insertions(+) create mode 100644 2015/13/.gitignore create mode 100644 2015/13/Makefile create mode 100644 2015/13/input create mode 100644 2015/13/puzzles.py (limited to '2015') diff --git a/2015/13/.gitignore b/2015/13/.gitignore new file mode 100644 index 0000000..ffc46fe --- /dev/null +++ b/2015/13/.gitignore @@ -0,0 +1 @@ +puzzle-[12].py diff --git a/2015/13/Makefile b/2015/13/Makefile new file mode 100644 index 0000000..247194a --- /dev/null +++ b/2015/13/Makefile @@ -0,0 +1,8 @@ +all: + sed '/START PART 2/,/END PART 2/d' puzzles.py >puzzle-1.py + sed '/START PART 1/,/END PART 1/d' puzzles.py >puzzle-2.py + chmod +x puzzle-[12].py + +.PHONY: clean +clean: + rm -f puzzle-[12].py diff --git a/2015/13/input b/2015/13/input new file mode 100644 index 0000000..a6f9c66 --- /dev/null +++ b/2015/13/input @@ -0,0 +1,56 @@ +Alice would gain 2 happiness units by sitting next to Bob. +Alice would gain 26 happiness units by sitting next to Carol. +Alice would lose 82 happiness units by sitting next to David. +Alice would lose 75 happiness units by sitting next to Eric. +Alice would gain 42 happiness units by sitting next to Frank. +Alice would gain 38 happiness units by sitting next to George. +Alice would gain 39 happiness units by sitting next to Mallory. +Bob would gain 40 happiness units by sitting next to Alice. +Bob would lose 61 happiness units by sitting next to Carol. +Bob would lose 15 happiness units by sitting next to David. +Bob would gain 63 happiness units by sitting next to Eric. +Bob would gain 41 happiness units by sitting next to Frank. +Bob would gain 30 happiness units by sitting next to George. +Bob would gain 87 happiness units by sitting next to Mallory. +Carol would lose 35 happiness units by sitting next to Alice. +Carol would lose 99 happiness units by sitting next to Bob. +Carol would lose 51 happiness units by sitting next to David. +Carol would gain 95 happiness units by sitting next to Eric. +Carol would gain 90 happiness units by sitting next to Frank. +Carol would lose 16 happiness units by sitting next to George. +Carol would gain 94 happiness units by sitting next to Mallory. +David would gain 36 happiness units by sitting next to Alice. +David would lose 18 happiness units by sitting next to Bob. +David would lose 65 happiness units by sitting next to Carol. +David would lose 18 happiness units by sitting next to Eric. +David would lose 22 happiness units by sitting next to Frank. +David would gain 2 happiness units by sitting next to George. +David would gain 42 happiness units by sitting next to Mallory. +Eric would lose 65 happiness units by sitting next to Alice. +Eric would gain 24 happiness units by sitting next to Bob. +Eric would gain 100 happiness units by sitting next to Carol. +Eric would gain 51 happiness units by sitting next to David. +Eric would gain 21 happiness units by sitting next to Frank. +Eric would gain 55 happiness units by sitting next to George. +Eric would lose 44 happiness units by sitting next to Mallory. +Frank would lose 48 happiness units by sitting next to Alice. +Frank would gain 91 happiness units by sitting next to Bob. +Frank would gain 8 happiness units by sitting next to Carol. +Frank would lose 66 happiness units by sitting next to David. +Frank would gain 97 happiness units by sitting next to Eric. +Frank would lose 9 happiness units by sitting next to George. +Frank would lose 92 happiness units by sitting next to Mallory. +George would lose 44 happiness units by sitting next to Alice. +George would lose 25 happiness units by sitting next to Bob. +George would gain 17 happiness units by sitting next to Carol. +George would gain 92 happiness units by sitting next to David. +George would lose 92 happiness units by sitting next to Eric. +George would gain 18 happiness units by sitting next to Frank. +George would gain 97 happiness units by sitting next to Mallory. +Mallory would gain 92 happiness units by sitting next to Alice. +Mallory would lose 96 happiness units by sitting next to Bob. +Mallory would lose 51 happiness units by sitting next to Carol. +Mallory would lose 81 happiness units by sitting next to David. +Mallory would gain 31 happiness units by sitting next to Eric. +Mallory would lose 73 happiness units by sitting next to Frank. +Mallory would lose 89 happiness units by sitting next to George. diff --git a/2015/13/puzzles.py b/2015/13/puzzles.py new file mode 100644 index 0000000..33e49e1 --- /dev/null +++ b/2015/13/puzzles.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 + +import re +from collections import defaultdict +from itertools import permutations +from typing import DefaultDict + + +def main() -> None: + with open("input", "r", encoding="utf-8") as f: + entries = list( + map( + lambda e: [e[0], e[1], int(e[2]) if e[1] == "gain" else -int(e[2]), e[3]], + ( + re.split( + r"([^ ]+) would (gain|lose) (\d+) happiness units by sitting next to ([^" + r" ]+).\n", + line, + )[1:-1] + for line in f.readlines() + ), + ) + ) + + emap: DefaultDict[str, dict[str, int]] = defaultdict(lambda: {}) + for entry in entries: + emap[entry[0]][entry[3]] = entry[2] + # START PART 2 + emap[entry[0]]["Me"] = 0 + emap["Me"][entry[0]] = 0 + # END PART 2 + + print( + max( + sum( + emap[pair[0]][pair[1]] + emap[pair[1]][pair[0]] + for pair in tuple(zip(perm, perm[1:])) + ((perm[-1], perm[0]),) + ) + for perm in permutations(emap) + ) + ) + + +if __name__ == "__main__": + main() -- cgit v1.2.3