From 57002d439a7ec6e10c416e9b68f43a3574517c3f Mon Sep 17 00:00:00 2001 From: Eveldee Date: Tue, 6 Dec 2022 15:30:29 +0100 Subject: [PATCH] Add day 5 --- Days/Day5.cs | 590 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 590 insertions(+) create mode 100644 Days/Day5.cs diff --git a/Days/Day5.cs b/Days/Day5.cs new file mode 100644 index 0000000..11da5ab --- /dev/null +++ b/Days/Day5.cs @@ -0,0 +1,590 @@ +using Spectre.Console; + +namespace AdventOfCode.Days; + +public class Day5 : Day +{ + public override int Number => 5; + public override string Name => "Supply Stacks"; + + private IDictionary>? _stacks; + + public override void RunPart1() + { + _stacks = InitStacks(); + + foreach (var line in Input.ReadAllLines()) + { + var split = line.Split(' '); + var moveCount = int.Parse(split[1]); + var fromStack = _stacks[int.Parse(split[3])]; + var toStack = _stacks[int.Parse(split[5])]; + + for (int i = 0; i < moveCount; i++) + { + toStack.Push(fromStack.Pop()); + } + } + + for (int i = 1; i <= 9; i++) + { + AnsiConsole.Markup($"[{(i % 2 == 0 ? "yellow" : "green")}]{_stacks[i].Pop()}[/]"); + } + AnsiConsole.WriteLine(); + } + + public override void RunPart2() + { + _stacks = InitStacks(); + + foreach (var line in Input.ReadAllLines()) + { + var split = line.Split(' '); + var moveCount = int.Parse(split[1]); + var fromStack = _stacks[int.Parse(split[3])]; + var toStack = _stacks[int.Parse(split[5])]; + + // Push items in reverse order and remove them from the other stack + var items = fromStack.Take(moveCount).Reverse().ToArray(); + foreach (var item in items) + { + toStack.Push(item); + fromStack.Pop(); + } + } + + for (int i = 1; i <= 9; i++) + { + AnsiConsole.Markup($"[{(i % 2 == 0 ? "yellow" : "green")}]{_stacks[i].Pop()}[/]"); + } + AnsiConsole.WriteLine(); + } + + #region Input + + private static IDictionary> InitStacks() + { + var stacks = new Dictionary> + { + [1] = new("SLFZDBRH".Reverse()), + [2] = new("RZMBT".Reverse()), + [3] = new("SNHCLZ".Reverse()), + [4] = new("JFCS".Reverse()), + [5] = new("BZRWHGP".Reverse()), + [6] = new("TMNDGZJV".Reverse()), + [7] = new("QPSFWNLG".Reverse()), + [8] = new("RZM".Reverse()), + [9] = new("TRVGLCM".Reverse()) + }; + + return stacks; + } + + public const string Input = + """ + move 6 from 1 to 7 + move 2 from 2 to 4 + move 2 from 7 to 4 + move 6 from 4 to 3 + move 1 from 5 to 1 + move 3 from 8 to 3 + move 15 from 3 to 4 + move 6 from 5 to 9 + move 14 from 4 to 2 + move 3 from 2 to 7 + move 1 from 2 to 7 + move 9 from 9 to 1 + move 3 from 2 to 1 + move 7 from 6 to 7 + move 1 from 6 to 8 + move 2 from 9 to 1 + move 9 from 2 to 3 + move 8 from 3 to 9 + move 1 from 1 to 4 + move 1 from 8 to 6 + move 1 from 6 to 2 + move 5 from 9 to 8 + move 2 from 9 to 1 + move 1 from 4 to 2 + move 17 from 1 to 9 + move 1 from 3 to 1 + move 3 from 2 to 3 + move 2 from 4 to 5 + move 12 from 7 to 3 + move 16 from 9 to 2 + move 5 from 7 to 5 + move 2 from 1 to 2 + move 1 from 3 to 6 + move 1 from 4 to 6 + move 1 from 7 to 3 + move 1 from 6 to 3 + move 7 from 3 to 4 + move 5 from 8 to 3 + move 1 from 6 to 7 + move 7 from 3 to 4 + move 6 from 3 to 1 + move 2 from 4 to 8 + move 1 from 5 to 2 + move 10 from 4 to 5 + move 3 from 5 to 2 + move 2 from 8 to 9 + move 5 from 2 to 8 + move 1 from 3 to 5 + move 2 from 5 to 8 + move 12 from 5 to 7 + move 1 from 4 to 2 + move 5 from 9 to 4 + move 1 from 2 to 5 + move 6 from 1 to 3 + move 6 from 3 to 5 + move 10 from 7 to 4 + move 2 from 7 to 3 + move 4 from 7 to 6 + move 1 from 9 to 5 + move 12 from 2 to 1 + move 1 from 8 to 7 + move 3 from 7 to 4 + move 4 from 4 to 8 + move 7 from 5 to 3 + move 1 from 2 to 4 + move 10 from 1 to 5 + move 2 from 1 to 2 + move 4 from 6 to 7 + move 8 from 8 to 3 + move 5 from 4 to 9 + move 12 from 3 to 8 + move 4 from 3 to 8 + move 2 from 9 to 2 + move 3 from 5 to 4 + move 1 from 3 to 5 + move 1 from 7 to 6 + move 14 from 4 to 6 + move 6 from 5 to 9 + move 8 from 2 to 8 + move 3 from 5 to 7 + move 21 from 8 to 4 + move 16 from 4 to 9 + move 8 from 6 to 2 + move 4 from 6 to 1 + move 1 from 4 to 6 + move 2 from 4 to 8 + move 3 from 1 to 8 + move 2 from 4 to 6 + move 1 from 6 to 2 + move 3 from 8 to 4 + move 2 from 2 to 5 + move 2 from 5 to 7 + move 1 from 8 to 9 + move 1 from 4 to 9 + move 1 from 1 to 6 + move 3 from 6 to 3 + move 3 from 2 to 3 + move 1 from 4 to 6 + move 3 from 6 to 7 + move 10 from 9 to 7 + move 1 from 4 to 7 + move 6 from 8 to 3 + move 1 from 6 to 8 + move 2 from 2 to 5 + move 1 from 2 to 1 + move 1 from 8 to 9 + move 1 from 2 to 8 + move 1 from 1 to 9 + move 7 from 9 to 1 + move 1 from 8 to 5 + move 7 from 1 to 7 + move 3 from 5 to 8 + move 3 from 7 to 2 + move 1 from 8 to 4 + move 1 from 2 to 4 + move 2 from 4 to 6 + move 5 from 3 to 1 + move 9 from 7 to 2 + move 6 from 3 to 8 + move 8 from 2 to 7 + move 2 from 6 to 4 + move 2 from 1 to 7 + move 2 from 1 to 4 + move 24 from 7 to 4 + move 4 from 8 to 9 + move 2 from 7 to 5 + move 1 from 5 to 2 + move 1 from 3 to 8 + move 4 from 2 to 8 + move 13 from 9 to 2 + move 2 from 8 to 6 + move 3 from 9 to 6 + move 26 from 4 to 2 + move 1 from 5 to 7 + move 2 from 6 to 2 + move 2 from 4 to 1 + move 7 from 2 to 1 + move 15 from 2 to 6 + move 8 from 2 to 8 + move 4 from 6 to 8 + move 9 from 2 to 9 + move 13 from 6 to 7 + move 6 from 1 to 9 + move 2 from 2 to 4 + move 4 from 1 to 6 + move 3 from 8 to 3 + move 1 from 4 to 9 + move 2 from 6 to 7 + move 1 from 4 to 3 + move 3 from 3 to 2 + move 14 from 7 to 4 + move 5 from 9 to 5 + move 9 from 8 to 5 + move 7 from 9 to 6 + move 2 from 5 to 6 + move 2 from 9 to 2 + move 10 from 5 to 1 + move 1 from 3 to 1 + move 2 from 8 to 1 + move 1 from 9 to 2 + move 1 from 7 to 5 + move 4 from 2 to 1 + move 1 from 9 to 8 + move 3 from 4 to 1 + move 1 from 8 to 6 + move 12 from 1 to 5 + move 1 from 1 to 6 + move 1 from 7 to 5 + move 4 from 6 to 9 + move 2 from 2 to 4 + move 1 from 9 to 6 + move 1 from 1 to 5 + move 2 from 9 to 7 + move 10 from 6 to 5 + move 1 from 6 to 7 + move 20 from 5 to 1 + move 1 from 7 to 9 + move 2 from 9 to 1 + move 3 from 5 to 1 + move 2 from 8 to 4 + move 2 from 8 to 7 + move 1 from 5 to 9 + move 1 from 8 to 4 + move 22 from 1 to 7 + move 5 from 4 to 8 + move 1 from 5 to 9 + move 19 from 7 to 4 + move 2 from 9 to 1 + move 1 from 5 to 9 + move 10 from 1 to 8 + move 1 from 9 to 1 + move 1 from 8 to 3 + move 8 from 4 to 7 + move 1 from 5 to 6 + move 3 from 4 to 5 + move 1 from 5 to 9 + move 11 from 7 to 4 + move 4 from 4 to 9 + move 1 from 6 to 2 + move 1 from 3 to 9 + move 5 from 9 to 4 + move 5 from 7 to 9 + move 23 from 4 to 2 + move 17 from 2 to 7 + move 2 from 2 to 8 + move 4 from 4 to 7 + move 1 from 4 to 5 + move 2 from 5 to 2 + move 5 from 8 to 9 + move 5 from 2 to 7 + move 9 from 7 to 5 + move 11 from 9 to 2 + move 1 from 4 to 3 + move 5 from 8 to 7 + move 3 from 8 to 5 + move 2 from 1 to 3 + move 2 from 3 to 9 + move 1 from 5 to 8 + move 5 from 7 to 5 + move 15 from 5 to 4 + move 2 from 8 to 1 + move 2 from 5 to 1 + move 4 from 4 to 1 + move 1 from 8 to 7 + move 8 from 2 to 1 + move 4 from 2 to 8 + move 2 from 7 to 4 + move 5 from 8 to 6 + move 5 from 7 to 9 + move 4 from 6 to 5 + move 7 from 4 to 8 + move 1 from 6 to 1 + move 1 from 3 to 1 + move 2 from 5 to 1 + move 7 from 1 to 5 + move 5 from 1 to 3 + move 4 from 7 to 9 + move 4 from 3 to 9 + move 2 from 9 to 7 + move 6 from 9 to 2 + move 1 from 4 to 1 + move 1 from 3 to 5 + move 1 from 2 to 5 + move 5 from 9 to 4 + move 4 from 4 to 6 + move 1 from 8 to 9 + move 8 from 4 to 3 + move 7 from 7 to 3 + move 5 from 1 to 3 + move 11 from 5 to 9 + move 1 from 7 to 6 + move 2 from 3 to 5 + move 1 from 3 to 1 + move 3 from 6 to 2 + move 2 from 5 to 1 + move 2 from 1 to 2 + move 3 from 1 to 5 + move 5 from 9 to 2 + move 2 from 6 to 8 + move 2 from 3 to 8 + move 4 from 9 to 7 + move 3 from 5 to 2 + move 2 from 1 to 8 + move 1 from 9 to 8 + move 1 from 9 to 2 + move 4 from 7 to 9 + move 11 from 8 to 7 + move 1 from 8 to 2 + move 6 from 9 to 7 + move 3 from 7 to 1 + move 13 from 2 to 7 + move 24 from 7 to 1 + move 2 from 2 to 6 + move 1 from 8 to 3 + move 1 from 9 to 3 + move 5 from 2 to 4 + move 1 from 2 to 5 + move 1 from 6 to 2 + move 1 from 6 to 3 + move 1 from 2 to 4 + move 3 from 7 to 3 + move 2 from 1 to 7 + move 2 from 3 to 8 + move 2 from 7 to 8 + move 9 from 3 to 2 + move 3 from 4 to 8 + move 1 from 5 to 1 + move 9 from 2 to 1 + move 3 from 4 to 9 + move 1 from 7 to 8 + move 6 from 3 to 9 + move 2 from 1 to 5 + move 15 from 1 to 3 + move 13 from 3 to 9 + move 11 from 1 to 4 + move 5 from 4 to 1 + move 6 from 3 to 6 + move 4 from 4 to 8 + move 6 from 1 to 4 + move 1 from 5 to 2 + move 1 from 2 to 1 + move 3 from 4 to 2 + move 2 from 8 to 5 + move 2 from 4 to 2 + move 9 from 9 to 3 + move 9 from 3 to 5 + move 2 from 9 to 4 + move 5 from 2 to 6 + move 1 from 1 to 8 + move 1 from 4 to 1 + move 10 from 9 to 2 + move 9 from 2 to 4 + move 10 from 4 to 1 + move 3 from 1 to 3 + move 4 from 1 to 2 + move 5 from 2 to 4 + move 2 from 5 to 2 + move 4 from 1 to 7 + move 10 from 5 to 4 + move 2 from 2 to 4 + move 1 from 9 to 2 + move 2 from 3 to 5 + move 1 from 3 to 5 + move 3 from 6 to 7 + move 8 from 4 to 9 + move 6 from 6 to 1 + move 4 from 9 to 5 + move 2 from 9 to 1 + move 1 from 2 to 6 + move 6 from 5 to 2 + move 3 from 7 to 9 + move 4 from 8 to 2 + move 1 from 7 to 9 + move 1 from 5 to 3 + move 2 from 7 to 4 + move 1 from 7 to 1 + move 14 from 1 to 9 + move 1 from 1 to 9 + move 1 from 3 to 8 + move 3 from 2 to 5 + move 2 from 4 to 2 + move 6 from 8 to 1 + move 1 from 2 to 1 + move 5 from 1 to 9 + move 1 from 1 to 7 + move 2 from 8 to 5 + move 1 from 5 to 4 + move 1 from 6 to 1 + move 8 from 2 to 7 + move 2 from 6 to 1 + move 9 from 9 to 5 + move 11 from 4 to 8 + move 4 from 7 to 4 + move 6 from 4 to 6 + move 1 from 7 to 4 + move 6 from 6 to 7 + move 1 from 5 to 9 + move 6 from 8 to 9 + move 8 from 9 to 5 + move 1 from 4 to 5 + move 15 from 9 to 3 + move 3 from 1 to 4 + move 6 from 7 to 2 + move 3 from 4 to 9 + move 2 from 7 to 3 + move 1 from 7 to 3 + move 1 from 7 to 2 + move 2 from 8 to 1 + move 3 from 8 to 5 + move 2 from 1 to 7 + move 8 from 3 to 6 + move 3 from 6 to 5 + move 1 from 6 to 1 + move 10 from 5 to 7 + move 6 from 5 to 4 + move 4 from 2 to 4 + move 6 from 5 to 1 + move 6 from 1 to 8 + move 2 from 9 to 2 + move 2 from 9 to 7 + move 6 from 3 to 7 + move 1 from 3 to 5 + move 1 from 1 to 9 + move 2 from 8 to 1 + move 2 from 5 to 4 + move 3 from 3 to 7 + move 10 from 4 to 6 + move 1 from 9 to 7 + move 12 from 7 to 3 + move 12 from 3 to 8 + move 2 from 1 to 5 + move 1 from 1 to 3 + move 13 from 8 to 1 + move 7 from 7 to 1 + move 13 from 6 to 9 + move 1 from 7 to 4 + move 6 from 5 to 3 + move 3 from 4 to 3 + move 6 from 3 to 1 + move 10 from 9 to 4 + move 2 from 7 to 6 + move 8 from 1 to 9 + move 3 from 2 to 9 + move 1 from 3 to 5 + move 1 from 3 to 5 + move 1 from 1 to 4 + move 6 from 9 to 3 + move 2 from 6 to 7 + move 4 from 9 to 5 + move 4 from 1 to 6 + move 1 from 2 to 4 + move 6 from 1 to 4 + move 3 from 9 to 3 + move 3 from 6 to 8 + move 3 from 8 to 7 + move 5 from 5 to 1 + move 1 from 3 to 9 + move 1 from 9 to 5 + move 1 from 3 to 2 + move 2 from 5 to 1 + move 1 from 6 to 9 + move 1 from 6 to 3 + move 2 from 9 to 7 + move 2 from 8 to 1 + move 1 from 3 to 2 + move 1 from 2 to 5 + move 1 from 7 to 1 + move 7 from 7 to 9 + move 12 from 1 to 9 + move 1 from 5 to 2 + move 1 from 7 to 1 + move 13 from 4 to 7 + move 1 from 9 to 4 + move 5 from 7 to 3 + move 4 from 9 to 1 + move 8 from 7 to 9 + move 3 from 2 to 3 + move 4 from 3 to 7 + move 5 from 4 to 6 + move 3 from 9 to 4 + move 10 from 1 to 5 + move 3 from 4 to 7 + move 16 from 9 to 2 + move 3 from 9 to 2 + move 6 from 5 to 3 + move 4 from 6 to 2 + move 1 from 4 to 6 + move 2 from 6 to 8 + move 1 from 5 to 2 + move 1 from 5 to 8 + move 7 from 7 to 2 + move 16 from 2 to 1 + move 1 from 5 to 1 + move 10 from 2 to 8 + move 14 from 8 to 5 + move 2 from 2 to 6 + move 1 from 2 to 5 + move 2 from 2 to 1 + move 8 from 1 to 7 + move 4 from 1 to 7 + move 2 from 1 to 7 + move 5 from 3 to 2 + move 1 from 1 to 6 + move 2 from 2 to 5 + move 4 from 1 to 7 + move 1 from 2 to 8 + move 1 from 2 to 8 + move 3 from 6 to 7 + move 10 from 7 to 5 + move 1 from 2 to 8 + move 27 from 5 to 9 + move 1 from 5 to 6 + move 1 from 6 to 4 + move 1 from 4 to 3 + move 3 from 3 to 7 + move 4 from 3 to 6 + move 2 from 6 to 4 + move 3 from 8 to 1 + move 2 from 6 to 1 + move 12 from 7 to 8 + move 2 from 3 to 9 + move 1 from 9 to 2 + move 1 from 2 to 8 + move 2 from 1 to 2 + move 6 from 3 to 8 + move 1 from 7 to 4 + move 15 from 9 to 5 + move 7 from 9 to 4 + move 1 from 2 to 1 + move 16 from 8 to 2 + move 8 from 5 to 2 + move 24 from 2 to 9 + move 3 from 1 to 2 + move 24 from 9 to 1 + move 5 from 5 to 9 + move 3 from 4 to 1 + move 1 from 7 to 6 + move 1 from 6 to 3 + move 1 from 3 to 2 + move 3 from 2 to 3 + move 1 from 5 to 6 + move 1 from 2 to 7 + """; + + #endregion +} \ No newline at end of file