From fd827e58edd7553c0fb05566e19371b97b0dfb30 Mon Sep 17 00:00:00 2001 From: Andrew Lalis Date: Fri, 2 Dec 2022 07:05:52 +0100 Subject: [PATCH] Day 2 solutions! --- input/2.txt | 2500 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/s2a.d | 15 + src/s2b.d | 27 + src/util.d | 1 + 4 files changed, 2543 insertions(+) create mode 100644 input/2.txt create mode 100644 src/s2a.d create mode 100644 src/s2b.d diff --git a/input/2.txt b/input/2.txt new file mode 100644 index 0000000..c08c4d1 --- /dev/null +++ b/input/2.txt @@ -0,0 +1,2500 @@ +A X +A X +A Z +B X +A X +B Z +A X +A X +A X +A X +C Z +C Y +A X +A X +A Z +C Y +A Z +B Y +C Z +A X +B Y +C X +C Z +C Y +A Y +B X +B X +A X +B X +A X +C X +B Z +C Y +A X +A X +C Z +A Z +A X +B X +B X +A X +B X +B Y +A X +A X +A Z +A Y +C Y +A Z +C Z +C Y +A Z +A X +B Z +A X +C Y +B Z +C Y +A X +A Y +C Y +A Z +B Z +A X +C Y +A X +A X +B X +C Y +A Y +A X +C Z +B Z +A X +B X +B Z +A X +A Z +A X +A X +A Y +A Z +A X +B X +A Z +A Z +C Y +A X +B Z +C Y +C Z +A X +A Z +A X +B Y +A X +C X +A X +A X +C Y +C X +A X +C Y +B Z +C Z +C Y +B Z +A X +C Y +B Z +A X +B Z +A X +B Y +A Z +B X +A X +A X +A X +C Y +C X +A Y +C Z +C Y +B Z +A X +A X +B X +A X +A X +A X +C Y +A X +A X +A Z +C Y +A Z +A X +A X +A X +C Y +A Y +A X +A X +C Z +C Y +B X +C Z +C Y +B X +C Y +A X +C Z +A X +B Y +C X +A X +B Y +B Y +A Z +A X +A X +C X +A Y +B Y +C Y +B Z +A X +A X +A Y +A X +A X +C Y +A X +C Y +C Y +C Z +A Z +A X +C Y +C X +C Y +A X +A X +C Y +A Z +A Y +A Y +B Z +B Y +B X +C Y +A X +C Y +C Z +A X +A Y +A Y +B X +C Y +A X +B Z +A X +C Y +B X +A Y +C X +C Y +A X +C Y +B Z +C Y +C Y +C X +B X +C X +C Y +B Z +C Z +C Y +A X +A Z +C Y +A Z +B X +C X +C Y +A Z +C Y +C X +A X +A X +A X +B Y +A X +A X +B Y +B Z +A X +A Y +A Z +B Y +A X +A X +A X +B Z +A X +C Y +A X +A X +B Y +A X +C Y +B X +C Y +A X +A X +C X +A Y +A X +B X +A X +C Y +C Y +C Z +A Y +B Y +B X +A X +A X +A X +C Y +A Y +A X +A Y +C Y +A X +A X +B Y +C Z +A Y +B Z +C Y +A X +C Z +B X +C Y +B Z +C Y +B Z +A Z +A X +A X +C Z +C X +A X +A X +C Y +B Z +B Y +A X +A X +A X +B X +B X +B Y +C Y +C Z +A X +C X +C Z +A X +A X +C Y +A X +A X +C Z +B Z +B Z +A X +B X +A Z +C Z +C Z +B X +B Z +B Z +C Y +A X +A Y +C Z +A X +A X +A X +A Y +A X +A X +A Z +C Y +C Y +A X +A X +A X +A Z +B Z +C Y +A Z +A X +B Y +A X +A X +C Z +A Z +A X +C Y +A Y +C X +B Z +C Y +C Y +A X +C Y +B Y +A X +A X +C X +B X +B Z +A Y +B X +B Z +B Z +A X +A Y +B Y +B Y +A Z +C Y +A X +A X +B Y +C X +A Z +B X +B Z +A X +A Y +C Y +B X +B Y +C Y +A X +B Y +B X +A X +C Y +B Y +B Z +B Y +C Y +C Y +B Z +C Y +B X +A X +A X +B Y +B X +B X +C Y +C Z +B X +A X +A Z +A Y +C Y +C Z +A X +A X +A X +C X +A Y +C Y +C X +A X +A X +A X +A X +B Z +A X +A X +A X +A X +A X +C Y +C Z +B Z +C Z +A Z +C Z +A X +B X +A Z +A X +A X +A X +A X +B Y +A Z +C Y +B Z +A Y +C Z +C X +B Z +C Z +C Z +C X +C Y +B X +C Y +C X +A X +A Y +A X +C X +A X +A X +C X +B Z +A X +A X +B X +C Z +A X +A X +B Y +A X +B Z +C Y +A Y +A Y +C Y +A X +A Z +C X +A X +C Y +A X +B X +C Y +A X +B Y +A X +A X +A X +C Y +C X +B X +A Y +A X +A X +A X +C Y +C Z +A Z +A X +C Y +A X +B Z +C Z +B X +B X +A X +A X +C Z +C X +A X +A Z +A X +C Y +A X +C Y +A Z +A X +C Z +C X +B X +B Z +C X +A Z +B X +C Y +B X +B Y +B X +A X +C Y +B Y +C Y +C Z +C Z +B Y +C Y +B Y +A Y +B Z +A X +B Z +C Y +A X +A X +A X +A X +C Z +C Z +C Z +A X +A X +C Z +C Z +A X +C Y +A Z +A Z +B Y +C Z +A Z +C Z +C Y +A X +B Z +C Y +C Z +A Z +C Y +A X +A X +A X +A X +B Z +B Z +A X +B Z +A X +A X +A X +C Z +C X +A X +C X +A Z +B X +A X +A X +A X +A Z +B Y +B Y +A X +C Y +A X +C Y +A X +A X +A Y +B X +A X +B Z +A X +C Y +C Y +A Z +A X +A X +B X +C Y +C Z +A X +A X +B X +A Y +A Z +C Z +A X +B Z +B Y +A Y +B Z +A Y +A X +C Y +A Z +A X +A X +A X +C Y +C Y +A Z +A Y +C X +A X +A X +A X +C Y +A X +B Z +C Y +B Y +C Z +A X +B Z +B Y +B X +C Y +C Z +B Y +C Y +C Y +C Y +A Z +A X +B Y +C Y +C Z +A Y +A X +B Z +C Y +A Z +C Z +A X +A Z +B X +C Z +A X +B Y +C Z +C Y +C Y +B Y +A Y +C Y +B Y +C Y +C Z +B X +A X +A X +A X +B Y +A X +A X +C Z +C Y +C Z +B Z +A X +B X +A Y +A Z +B Y +C Y +C X +A X +C Y +A Y +A Z +B Z +A Z +A Y +C Y +A X +C X +C Y +B Y +B Y +B Y +A X +C Z +A X +C Y +A Z +B Z +C Y +C Y +C Y +C Y +B X +A Y +C X +C X +A X +A Z +B X +A X +C Y +B X +C Y +B X +C Y +A X +A Z +C Y +A Y +A X +A Z +A X +B Z +A X +B Y +C Z +A X +B X +B X +A X +C Z +A X +C Y +A X +A X +B X +A X +C Z +A X +A Y +C Y +B X +B X +B Z +A X +A X +A X +A X +B Y +A Y +A X +C Z +C Y +C Z +A Z +A X +B X +C Y +A X +C Z +A Z +A X +A X +B X +A X +B Z +B X +A Y +A Z +A Y +A Z +A X +C Y +C Y +B X +C Y +B X +A X +B Z +C Y +A Y +C Y +C Y +A Z +B Z +B X +A X +B Z +C Y +C Y +C Y +A Z +A X +A X +C Y +B X +B X +A X +A Z +A X +A X +A Z +C Y +B X +A X +A Y +A X +B Z +A Z +C Y +A X +A X +A Y +A X +A X +A X +B X +B X +A Z +B Z +A Y +A X +B X +C X +A Z +B Z +C Y +B Y +C Y +B X +A X +C Z +B Y +A X +C Y +C Y +C Y +A Y +B Y +A Z +B Z +A X +A Y +C Y +C X +A X +C Y +C Y +A X +A X +A X +B X +B Z +A Z +A X +C Z +C Z +B X +C Z +A Y +A X +A Y +B Z +A Y +A X +C Y +B X +A X +B X +A X +C X +A X +B Y +A Z +C Y +A X +C X +B Z +A X +C Y +A Y +C Y +A X +B X +C Y +A X +B X +A X +A Y +C Z +A X +A X +A X +A X +B X +C X +A X +A X +C Y +C Y +A X +A X +A Y +C Y +A X +B Z +A Z +C Y +B X +A Y +A Z +A X +A X +C X +A X +B X +A X +C Y +B Z +B Z +A X +B Y +A X +B Y +B Z +B X +B Y +C Y +A X +C Y +A X +A X +A X +A Z +C Y +C Y +A Y +B X +A Z +A Y +A Y +A X +B X +C Y +A X +C X +C Y +C Z +A X +A Z +A Z +A Z +A X +C Y +A X +A Y +A X +C Z +C Y +C Y +B Z +B Z +B Z +A X +C Z +A Z +A X +A X +A X +B Z +B X +A X +B Z +B Y +C Y +C Y +A X +A X +C Y +C Y +C Z +B X +A X +A X +C Y +A X +C Y +A Z +C Y +A X +C Z +B Z +C Z +C Y +B Z +C Y +B X +B X +B X +C Y +A Z +A X +C Y +A Y +C Z +A Y +C Z +B Y +C Y +A X +A Y +A X +C X +C Y +C Y +C Y +C Y +A Y +C Y +B Z +C Y +A X +C Z +B Z +A Y +A X +B Z +A Y +A Z +A X +C Y +C Y +C Y +A Y +B X +C Z +A X +B Z +C Z +A X +B X +B Y +A X +C Y +B X +A Z +A Y +A X +A X +A X +B X +C Z +C Y +B Y +B X +C Y +A X +A X +C Y +A Z +C X +A X +A Z +A X +A X +C Y +A Z +A Y +A X +A Z +B Z +A X +B X +B X +B X +B X +C Y +B Y +A X +A Y +A Y +A Y +B Y +A Y +C Z +A X +A X +A X +A X +A Y +C Y +B X +A X +A X +A X +A Z +A X +A X +C Y +B Y +B X +B X +A X +A X +C Y +A Z +C X +C X +C Y +A Y +C Z +B Z +B X +A X +A X +C X +A X +C X +A Y +B X +A X +B X +B Z +B Z +B Z +A X +B Y +C Z +C X +B X +B Z +A X +A X +C Z +A X +A X +B Y +A X +C Y +C Z +B Z +B Z +A X +A X +A X +A X +B X +B Z +C Z +A Y +B X +A X +C Y +C Y +A Z +C Z +C Y +A X +C Z +A Z +C Y +C Y +A X +A X +B Y +B Z +A Z +A Y +A Y +A X +B X +A Z +C Y +C Y +B Z +B Z +B Y +C Y +B Y +A X +C Z +B Z +C X +C Y +A X +A X +B X +C Y +A X +A X +A Z +A Y +C Y +A X +A X +B X +B X +C Z +C Y +B X +C Y +B Z +A X +A X +C Y +A Y +B Z +B Z +A Y +A Z +A X +A X +A Z +C Y +A X +C Y +A Y +C Y +C Z +B X +B X +C Y +A X +B X +B Z +C Y +C Y +C X +A Y +C Z +A X +C Y +A Y +A X +A Y +A X +A X +A Y +B X +B Y +A X +C Z +C Y +C Z +A Z +B Y +C Y +C X +C Y +A X +C Z +A X +C Z +A X +B X +A X +A X +B X +A X +A Y +A X +C Z +C Y +A Z +B Y +A X +A Y +A X +C X +B X +B X +A Z +C Z +C Y +B Y +A X +B Y +A Z +A X +A X +A X +A X +C Y +C Y +B Y +C Y +B Z +A X +A X +B Z +B Y +C Y +C Y +C Z +C Y +A X +A X +C X +B Y +B X +C X +B X +B Y +A X +C X +C X +A Y +C X +A X +A Z +C X +B Y +C Y +B Z +B X +A X +A X +A X +B X +C Y +C Y +B X +A X +C Y +A X +A X +A X +C Z +A X +A X +C Z +A X +C X +C Y +C Z +A X +A X +C Y +A Y +A X +C Y +A Y +A X +A Y +A Z +A X +C Y +A X +C Y +A X +A Y +A Z +B X +B X +B X +B Y +C Z +B Z +C Y +B Z +A Z +A X +A X +A X +B X +C Y +B X +B Z +A Z +C Y +A Z +C X +A X +B Y +B Y +A Z +C Y +A X +A X +A X +A X +B Y +C X +A X +C Z +C Y +B X +A Y +A Z +A X +B Y +C X +B Z +B Y +A Y +A X +A X +A X +B Z +A X +C Z +A X +C Y +A X +B X +A X +A X +A X +A X +A X +A Z +A Y +A Y +A Z +B X +A Y +B Z +C Y +B Z +C Z +A Z +C X +C Y +B X +B X +B Z +A X +A X +A Z +A X +A X +C Y +C Y +A Z +C Z +A Z +B Z +C X +A X +C Z +C Y +A X +C Z +B Y +B Z +A Y +A X +C Y +A X +C X +A Z +A X +A X +A Y +C Y +C Y +A X +A X +C Y +B Y +B Z +C Y +C Z +A Z +A Y +C Z +B X +C Y +C Y +A X +A X +A X +A X +B Z +A X +C Y +A X +A X +B Z +A X +A X +A X +A X +B X +A X +C Y +A X +A X +C Y +A Y +A X +C Y +A X +A Z +B X +A Y +A Z +C X +C Y +A X +C Z +C Y +A Y +A X +A X +C X +A X +B Y +A X +C Z +A X +B Y +A X +C X +C Z +A X +C Y +C X +C Y +B Z +A Z +A Y +A Y +C Y +C Z +C Y +B X +C Y +A X +C Y +C Z +A Z +C X +A X +A Y +B Y +C Z +C Y +B Z +C Z +C Y +B Z +C Y +A X +B Z +B Z +C Z +C X +C Y +A X +C Z +C Y +A X +C Y +A X +C Y +A X +B X +C Y +A X +B X +A Z +B Z +A X +A Z +A Y +A X +A Y +A X +C Z +A Y +A X +C Y +B X +A X +B Z +C Y +B X +A X +C Y +A X +A Y +C Y +B X +C Y +A Y +C Y +C Z +B Y +C Y +A Y +C Y +B X +A X +A X +A X +A Z +A X +B Z +A X +C Y +A Z +B X +A X +A X +A X +A X +A Z +C Y +B Z +A X +B Y +C Y +C Y +B Y +C X +A X +A X +A X +B X +B X +B X +C X +B Y +B Z +C Y +C Y +B X +B Z +A Z +A Y +A X +A X +A X +C Y +A X +C Y +C Z +C Z +C Z +A Y +C Y +A X +A X +B Z +A Y +C X +A Z +A X +A X +A X +A X +A X +A X +A Z +C Y +C Y +A Z +A X +A X +A X +A X +B X +C Y +A X +B X +C Y +A Y +A Y +C Y +A X +A Y +B Z +A X +A X +C Y +C Y +A Y +A X +A X +A Z +B X +A X +C Y +A X +B X +C X +A X +A X +A X +A X +A X +C Y +B Y +C Y +C Z +A Y +A X +C Y +B X +B X +A X +A Y +B X +B Y +C Y +C X +C X +A X +A X +A X +A X +A Z +C Z +A X +A X +A X +A Y +B X +B X +A X +A X +A X +A X +C Z +C Y +A Z +C Y +B X +A X +C Y +C Z +A Z +B Y +A X +B Y +A X +A Z +C Y +C Y +C Y +A X +C Y +A X +A Z +B Z +B Y +A Y +C X +C Z +A Y +C X +A X +A X +C X +A X +A Y +A X +A Z +A X +A X +A X +C Y +A Y +A Y +B Z +A X +C Y +C Y +B Y +A Z +C Z +B Z +A X +A X +C X +A Y +A Y +C Y +C Z +B X +B X +C Z +B Z +A X +C Z +A X +A Z +C Z +C Y +B Z +B Y +C Z +B Z +C Y +B X +C Y +A Z +C Y +B X +C Z +A Z +A X +B X +B Y +B Z +B Z +B X +C Y +A X +C X +A X +B X +B Z +A Z +A X +A Y +B Y +A X +C Y +A Z +B X +A Y +B X +A X +B Z +A X +C X +A X +C Y +B X +B Z +B Z +A X +A Z +B Y +A X +A X +B X +C Y +C Z +A X +A X +A X +C Z +C Y +A Z +B X +A Z +C Y +A X +A X +A Z +B X +C Y +A X +A X +A X +A X +B Z +A X +A Z +A X +C Y +C X +C Y +A X +B X +B Z +A X +C X +A X +A Y +A X +C Z +C Y +C Y +C Y +B X +B Z +C Y +A X +A Y +C Z +A X +C Y +B Y +B Y +A X +A X +A X +A X +C Y +B Z +C Z +C Y +A Y +B Y +C Y +A X +B X +A Y +C X +C Y +C Y +A Z +C Y +C Z +C Y +B X +C Y +B X +B X +C Y +B Z +A X +A X +B X +C Y +A Y +B Y +A X +A X +B Y +C Y +A X +B X +A X +A Y +B X +C Y +A Z +A X +C Y +A X +B Y +A Z +C Y +B Z +A Z +B Z +C X +A X +A Z +B X +B Y +A X +A Y +B X +C Y +C Y +C Y +C Y +A Z +C Z +A X +B Y +C Z +A X +C Y +B Y +C Z +C Y +A Z +A X +C Y +C Y +C Z +A X +C Y +B Y +B Z +B X +A X +C Z +C X +A Y +B X +A X +A X +A X +C Z +C Z +A Y +C Y +B Y +C X +B X +C X +A X +A X +B Y +A X +A X +C X +A Y +A X +C Y +A Y +B X +C Y +A X +C Z +A Z +A Y +A X +A Y +B Y +A X +A X +C Z +A Y +C Y +B Z +C Y +B Z +A X +B Z +B Z +A Y +B Z +B X +C X +A X +A X +B Y +A X +A X +A X +A X +B X +C Z +A X +A Y +B X +C X +C Y +A X +A X +C Y +A X +A X +C Z +C Z +B X +A Z +B Z +A X +A X +C Y +A Y +A X +A Z +A Y +C Y +A X +C Y +B X +A X +A X +A X +A Z +A Z +A X +B Z +A Z +C Z +B Y +A X +C Y +B Z +C Y +A X +B X +C Y +A X +C Y +A Z +A X +A Y +B X +C X +B X +A X +C Y +C Y +B X +B X +C Y +A X +A Y +B Y +A X +C X +C Y +A Y +C Y +C Z +A X +B Y +A Y +A X +A Z +A Y +C Y +A X +A X +B Z +B Y +B Y +A X +C Z +A Y +A X +B Z +C Z +B Z +A X +B X +C X +A X +A X +A X +A X +A X +C X +A X +A Z +A X +C Z +A X +A X +B Z +A Z +B Z +A Y +A X +C Y +A X +B Y +C Y +B Z +B Z +A X +B Z +C Y +B Z +A Z +B Y +B Z +B X +B Y +A X +B X +A X +C X +B Y +B Y +B X +B Z +C Y +C Y +B Z +A Z +A X +A X +C Y +A X +A X +A Y +A X +B Z +A X +A X +B Z +B Z +A X +A Z +A X +A X +A X +A Z +A Z +C Z +C Y +A Y +A X +C Z +C Z +B Y +B X +B Z +C Y +A X +B Z +A Z +A X +A X +C X +A X +C Y +C X +A Z +A Y +B Z +C Z +B Y +B X +C Z +A Z +B X +A X +A X +A X +A Z +B Y +B Z +A X +A Y +C Y +A X +A X +C Z +B Z +C Y +C X +C Y +C Y +B Z +A X +B X +A X +A Z +B Z +A X +B X +C Y +C Y +B Y +A X +A Y +C X +B X +C Z +B X +A X +C Y +A X +C Y +A X +B Z +C Y +B Z +A Z +A Z +C Z +C Y +A Z +C Y +A Z +C Y +B X +A X +B X +A X +C Y +C X +C Z +A X +A X +A X +B Y +A X +B Z +A X +A X +A X +C Y +C Y +A X +B X +C Y +A Z +A X +C Y +B X +C Z +C Y +C X +B X +A X +C X +C Y +A Y +B Z +B Y +B X +C Y +C Z +B Y +A X +C X +A X +B X +C Z +A X +A X +C Y +A Z +A X +C Y +A Z +C X +A X +C Y +A Z +A X +A X +A Y +A X +C Y +A X +C Y +A X +A Y +C Y +C Y +B Y +B Y +B Z +A X +B X +B Z +B X +A X +B X +A X +A X +A X +A X +C X +B X +B X +A X +A Y +A X +B Y +A X +A Z +B Z +A Y +A X +A X +C Y +B Z +C Y +A X +C Y +A X +C Y +B X +A Z +B X +A X +A Z +B Y +B Y +C X +C Y +A X +B X +C Z +C Z +A Y +A X +C Z +A X +A X +C Z +B X +C Y +A X +C X +C Z +C Z +B Z +A X +A X +A X +B X +A Y +B Z +A X +B Y +A Z +A X +B Z +B Y +B X +A X +A Y +C Z +A X +C Y +C Y +A Y +A Y +A Y +C Z +C Y +B X +A Y +A Z +A Y +A X +C Z +C Y +C Y +C X +B Y +A X +A X +A X +C Y +B Y +C X +C Y +A X +A Z +B Z +B Y +B Z +B Z +B X +A X +B Z +C Y +C Y +C Y +A X +A X +B Y +B Z +B Y +C Y +B Y +A X +C X +A Z +C Y +C Y +B X +A Y +A X +C Y +A Y +A Z +B X +C Y +C Z +A X +C Y +B X +B Y +A X +A X +A X +B Z +A X +C Z +C Y +B X +C Y +C Y diff --git a/src/s2a.d b/src/s2a.d new file mode 100644 index 0000000..08ce365 --- /dev/null +++ b/src/s2a.d @@ -0,0 +1,15 @@ +module s2a; +import util; + +void main() { + readText("input/2.txt").strip.splitter("\n") + .map!(l => l.strip.splitter(" ").map!(c => c.to!char).array) + .map!((c) { + int sOp = c[0] - 'A' + 1; + int sMe = c[1] - 'X' + 1; + if (sMe == sOp % 3 + 1) return 6 + sMe; + if (sOp == sMe % 3 + 1) return sMe; + return 3 + sMe; + }) + .sum.writeln; +} diff --git a/src/s2b.d b/src/s2b.d new file mode 100644 index 0000000..56bd6ec --- /dev/null +++ b/src/s2b.d @@ -0,0 +1,27 @@ +module s2b; +import util; + +const ROCK = 1; +const PAPER = 2; +const SCISSORS = 3; + +void main() { + readText("input/2.txt").strip.splitter("\n") + .map!(l => l.strip.splitter(" ").map!(c => c.to!char).array) + .map!((c) { + int sOp = c[0] - 'A' + 1; + int sEnd = c[1]; + if (sEnd == 'X') { + int sMe = sOp - 1; + if (sMe < 1) sMe = 3; + return sMe; + } + if (sEnd == 'Z') { + int sMe = sOp + 1; + if (sMe > 3) sMe = 1; + return 6 + sMe; + } + return 3 + sOp; + }) + .sum.writeln; +} diff --git a/src/util.d b/src/util.d index 4fdeacd..c9d658e 100644 --- a/src/util.d +++ b/src/util.d @@ -11,3 +11,4 @@ public import std.conv; public import std.path; public import std.uni; public import std.array; +public import std.format;