aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2015/13/.gitignore1
-rw-r--r--2015/13/Makefile8
-rw-r--r--2015/13/input56
-rw-r--r--2015/13/puzzles.py45
4 files changed, 110 insertions, 0 deletions
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()