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(bool display = true) { _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()); } } if (display) { for (int i = 1; i <= 9; i++) { AnsiConsole.Markup($"[{(i % 2 == 0 ? "yellow" : "green")}]{_stacks[i].Pop()}[/]"); } AnsiConsole.WriteLine(); } } public override void RunPart2(bool display = true) { _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(); } } if (display) { 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 }