From 92744372ec292d465e9d257e4cff5d01772851df Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Fri, 24 Dec 2021 12:56:10 -0500 Subject: [PATCH] day 24 --- aoc2021.test/DayTests.cs | 3 +- aoc2021/Day24.cs | 53 ++++++++ aoc2021/input/day24.in | 252 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 307 insertions(+), 1 deletion(-) create mode 100644 aoc2021/Day24.cs create mode 100644 aoc2021/input/day24.in diff --git a/aoc2021.test/DayTests.cs b/aoc2021.test/DayTests.cs index 3aa8804..8acae88 100644 --- a/aoc2021.test/DayTests.cs +++ b/aoc2021.test/DayTests.cs @@ -44,6 +44,7 @@ public class DayTests [DataRow(typeof(Day21), "512442", "346642902541848")] [DataRow(typeof(Day22), "658691", "1228699515783640")] [DataRow(typeof(Day23), "15365", "52055")] + [DataRow(typeof(Day24), "99299513899971", "93185111127911")] public void CheckAllDays(Type dayType, string part1, string part2) { var s = Stopwatch.StartNew(); @@ -72,7 +73,7 @@ public class DayTests Console.WriteLine($"{s.ScaleMilliseconds()} ms elapsed"); Assert.AreEqual(part2, part2Actual, $"Incorrect answer for Day {day.DayNumber} Part2"); } - + [DataTestMethod] [DataRow(typeof(Day01), "7", "5")] [DataRow(typeof(Day02), "150", "900")] diff --git a/aoc2021/Day24.cs b/aoc2021/Day24.cs new file mode 100644 index 0000000..1c4e52b --- /dev/null +++ b/aoc2021/Day24.cs @@ -0,0 +1,53 @@ +namespace aoc2021; + +/// +/// Day 24: +/// +public sealed class Day24 : Day +{ + private readonly Dictionary _keys = new(); + + public Day24() : base(24, "Arithmetic Logic Unit") + { + var lines = Input.ToList(); + var pairs = Enumerable.Range(0, 14) + .Select(i => (int.Parse(lines[i * 18 + 5][6..]), int.Parse(lines[i * 18 + 15][6..]))) + .ToList(); + + var stack = new Stack<(int, int)>(); + foreach (var ((x, y), i) in pairs.Select((pair, i) => (pair, i))) + if (x > 0) + stack.Push((i, y)); + else + { + var (j, jj) = stack.Pop(); + _keys[i] = (j, jj + x); + } + } + + public override object Part1() + { + var output = new Dictionary(); + + foreach (var (key, (x, y)) in _keys) + { + output[key] = Math.Min(9, 9 + y); + output[x] = Math.Min(9, 9 - y); + } + + return long.Parse(string.Join("", output.OrderBy(x => x.Key).Select(x => x.Value))); + } + + public override object Part2() + { + var output = new Dictionary(); + + foreach (var (key, (x, y)) in _keys) + { + output[key] = Math.Max(1, 1 + y); + output[x] = Math.Max(1, 1 - y); + } + + return long.Parse(string.Join("", output.OrderBy(x => x.Key).Select(x => x.Value))); + } +} \ No newline at end of file diff --git a/aoc2021/input/day24.in b/aoc2021/input/day24.in new file mode 100644 index 0000000..a7d1226 --- /dev/null +++ b/aoc2021/input/day24.in @@ -0,0 +1,252 @@ +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 14 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 1 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 15 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 7 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 15 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 13 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -6 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 10 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 14 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 0 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -4 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 13 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 15 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 11 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 15 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 6 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 11 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 1 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x 0 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 7 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x 0 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 11 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -3 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 14 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -9 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 4 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -9 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 10 +mul y x +add z y