diff --git a/Days/Day1.cs b/Days/Day1.cs index 279b451..2247034 100644 --- a/Days/Day1.cs +++ b/Days/Day1.cs @@ -11,7 +11,7 @@ public class Day1 : Day { int currentCalories = 0; int maxCalories = 0; - foreach (var line in Input.Split('\n')) + foreach (var line in Input.ReadAllLines()) { // Next elf on empty line if (string.IsNullOrWhiteSpace(line)) @@ -36,7 +36,7 @@ public class Day1 : Day var elfCalories = new List(); int currentCalories = 0; - foreach (var line in Input.Split('\n')) + foreach (var line in Input.ReadAllLines()) { // Next elf on empty line if (string.IsNullOrWhiteSpace(line)) diff --git a/Days/Day2.cs b/Days/Day2.cs index c171d49..8429968 100644 --- a/Days/Day2.cs +++ b/Days/Day2.cs @@ -2,18 +2,2609 @@ using Spectre.Console; namespace AdventOfCode.Days; +public enum Choice : long +{ + Rock = 1, + Paper = 2, + Scissors = 3 +} + +public enum Outcome : long +{ + Lose = 0, + Draw = 3, + Win = 6 +} + public class Day2 : Day { public override int Number { get; } = 2; - public override string Name { get; } = "Second day"; + public override string Name { get; } = "Rock Paper Scissors"; public override void RunPart1() { - AnsiConsole.WriteLine("Day 2 result"); + long score = 0; + + foreach (var line in Input.ReadAllLines()) + { + var adversaryChoice = AdversaryInputToChoice(line[0]); + var selfChoice = SelfInputToChoice(line[2]); + + score += (long) selfChoice; + score += (long) ComputeOutcome(adversaryChoice, selfChoice); + } + + AnsiConsole.MarkupLine($"[green]Total score: [yellow]{score}[/][/]"); } public override void RunPart2() { - AnsiConsole.WriteLine("Day 2 result"); + long score = 0; + + foreach (var line in Input.ReadAllLines()) + { + var adversaryChoice = AdversaryInputToChoice(line[0]); + var desiredOutcome = InputToOutcome(line[2]); + var selfChoice = ComputeChoiceFromDesiredOutcome(adversaryChoice, desiredOutcome); + + score += (long) selfChoice; + score += (long) desiredOutcome; + } + + AnsiConsole.MarkupLine($"[green]Total score: [yellow]{score}[/][/]"); } + + private Outcome ComputeOutcome(Choice adversary, Choice self) => (adversary, self) switch + { + var (x, y) when x == y => Outcome.Draw, + (Choice.Rock, Choice.Paper) => Outcome.Win, + (Choice.Paper, Choice.Scissors) => Outcome.Win, + (Choice.Scissors, Choice.Rock) => Outcome.Win, + _ => Outcome.Lose + }; + + private Choice ComputeChoiceFromDesiredOutcome(Choice adversaryChoice, Outcome desiredOutcome) => + (adversaryChoice, desiredOutcome) switch + { + (var x, Outcome.Draw) => x, + (Choice.Rock, Outcome.Win) => Choice.Paper, + (Choice.Paper, Outcome.Win) => Choice.Scissors, + (Choice.Scissors, Outcome.Win) => Choice.Rock, + (Choice.Rock, Outcome.Lose) => Choice.Scissors, + (Choice.Paper, Outcome.Lose) => Choice.Rock, + (Choice.Scissors, Outcome.Lose) => Choice.Paper, + _ => throw new ArgumentOutOfRangeException() + }; + + private Choice AdversaryInputToChoice(char input) => input switch + { + 'A' => Choice.Rock, + 'B' => Choice.Paper, + 'C' => Choice.Scissors, + _ => throw new ArgumentException("Invalid input") + }; + + private Choice SelfInputToChoice(char input) => input switch + { + 'X' => Choice.Rock, + 'Y' => Choice.Paper, + 'Z' => Choice.Scissors, + _ => throw new ArgumentException("Invalid input") + }; + + private Outcome InputToOutcome(char input) => input switch + { + 'X' => Outcome.Lose, + 'Y' => Outcome.Draw, + 'Z' => Outcome.Win, + _ => throw new ArgumentOutOfRangeException(nameof(input), input, null) + }; + + #region Input + + public const string Input = + """ + B Z + B X + C Y + B Y + B Y + A X + A X + B Z + A Z + B Z + B Y + B X + C X + B Y + A Z + B Y + A X + B X + C Y + B Y + B Y + C Y + B X + B X + C X + B Y + B Y + B Y + C Y + C X + B Y + C X + C X + B Y + B Z + C Y + B Y + B Z + B X + B Y + B Y + C Y + B Y + C Y + C Y + A Z + B X + C X + B Y + B X + C X + A X + B Y + C Y + B X + C X + C Y + B X + B Z + B Y + B X + C Y + B X + B Y + B Y + B Y + B Y + A X + A Z + B Z + B Y + C X + B Y + B Y + C Y + C Z + C Z + C X + B X + C Z + B Y + B Y + C X + C Z + C X + A Z + C Y + B Y + B Y + B Y + C Y + C Y + C X + C X + C Z + A X + B Y + C X + B Z + B Y + C X + B X + B Z + A Z + C Y + B Z + C X + C X + B Y + B Y + B Y + C Y + C X + B X + B Y + A Z + A Z + C Y + B Y + C Y + C Y + C Y + B X + A Z + C Y + C Y + A Z + A Z + B X + B Y + B Z + A Z + B X + B Y + C Z + C Z + B Z + B Y + B X + A Y + C Z + C X + A Z + A Z + B Y + B Y + C Y + C Y + B Y + B Y + B Y + A Z + C Y + C Z + C X + A Z + B X + B Y + A Y + A Y + B Y + B Y + C X + B Y + B Y + C Z + B Y + B Y + A Z + C Y + B X + C X + A X + C X + B Y + B X + A Z + C X + C Y + A Z + B Y + A Z + B X + B X + A Z + B Y + C X + C X + A Z + A X + C X + C X + C X + B Y + C Z + C Y + C X + B Y + B Y + B Y + A X + A Z + C Y + B Y + B Y + A X + C Y + C Z + C Y + C X + B Y + B Y + B Y + B Y + A Z + B Y + A Z + B X + B Y + B Y + B X + C Y + A X + A Z + B Y + C Y + C Y + B Y + B Y + C X + B Y + B X + A Z + B Y + B Y + C Y + B Y + B Y + B Y + A X + B X + B Z + C Y + B Z + C X + C X + B Z + B Y + A Z + A Z + B Y + C X + A X + C Y + B Y + B Y + A X + B Y + A Y + C Y + B Y + C X + B Y + A Z + B Z + C Y + B Y + B Y + C X + B Y + B Y + B Y + C Z + A X + B Y + B X + C X + C Z + C Z + C Y + C Y + A X + C Y + B Y + A X + C X + A Z + C X + B Y + C Z + C Z + A Z + A X + C Y + C X + B Y + C Z + B Y + C Y + C X + C Y + B Y + B Y + B Y + A X + A Z + B Y + B X + B X + B Y + B Y + B Y + A Z + B Y + B Y + A X + A X + A Z + A Z + B X + C Y + A Z + B Y + B Y + C Z + C X + C Y + A Z + C Y + C Y + C Y + C Y + C X + A Z + C Z + A Z + C Y + C X + B Y + B Y + C Z + B X + B Z + C X + A Y + C Y + B X + B X + B Y + C Y + A Z + A Z + B X + B Z + B X + C Y + A X + A X + C Z + B Y + C Y + C X + B Y + A Z + B Y + C Y + B Z + C Z + C X + B Z + C Z + B Z + A X + C Y + A Z + B Y + B Y + B Y + B Y + B Y + B Y + A Z + C Z + B X + C X + C Y + C Y + B Y + C X + C X + A Y + C Y + C Y + A Z + C Z + B Y + B X + C X + B Y + C X + B Y + B Y + C X + B Y + B Y + B Y + A Z + C Y + B Z + B Y + C X + B Y + C X + A Y + A Z + B Y + B Y + B Y + A Z + B Y + B Y + B Y + B Y + B Z + C Y + B Z + B Z + A Z + B Y + B Y + C X + A X + B Y + A Z + C X + C X + B Y + B Y + A X + B Y + B Y + C X + B Y + C X + B Y + B Y + B Y + B Y + A X + B Y + B Z + B Y + A Z + C X + C X + C Y + A Z + C Y + B Y + B X + A X + B Y + A Z + B Y + C Y + B Y + B Y + C Y + C X + A Z + A X + A Z + C Z + B Y + B Y + C Y + B X + C X + B Y + A Z + B Y + C X + A X + C X + C Y + C Y + B X + B Y + B Y + C Z + B Y + C X + A Z + C Z + C Y + A Z + C X + C Y + C Y + C X + B Y + B Y + C Z + A Z + B Y + A X + B Y + A X + A X + C Y + C X + A Z + B Y + C Y + C X + B Y + B Y + B Y + B X + B X + A X + C X + B Y + C Y + A Z + A Z + A Z + B Y + A Z + B Y + C X + B Y + C X + C Y + A Z + B Y + B Z + A Z + B Y + A Z + B Y + B Y + C Z + B Y + B Y + A Z + A X + C Z + C Z + B Z + B Y + A Z + B Y + B Y + B Y + B Y + C Z + A Z + C X + B X + B Y + A X + A X + B Y + A Z + A X + C Y + B Y + C X + A Z + B Y + C Z + C Y + B Y + A X + C Y + B Y + B Z + A Y + B Y + B Y + A Z + B Y + C Z + C X + B Y + A Y + C Z + B X + A X + B Y + B Y + B Z + B Z + C Y + B Y + B Y + A Z + A Z + B Y + B X + C Y + C Y + B Y + B Y + B Z + B Z + B Y + C Y + A Z + B Y + A Z + B Y + B Y + A Z + A Z + C X + C Z + B Y + C X + B X + A Z + B Y + B Y + C X + B Y + B Y + B Y + B Y + B X + B Y + A X + B Z + A Z + C Z + B X + A Z + C Y + C Y + A Z + B Y + C Z + C Z + C Y + B Y + B Y + B Y + A Z + B Y + B X + C X + B Y + B Y + B Y + B Y + C Y + B Y + C Y + B Y + C Y + C X + A Z + C Y + C Z + C Z + B X + C Y + B Y + B X + C Y + B Y + B Y + C Y + C X + C X + A Z + B Y + C X + A Z + C Z + B Y + B Y + C X + C X + B Y + B X + C Y + B Y + B Y + A Z + A Z + C Z + A Z + B Y + C X + C X + B X + B Y + B Y + B Z + B Y + B Y + B Y + B Y + B Z + B Y + C Y + C Z + B Y + C Y + C Y + C Y + C Y + A Z + A Z + C Y + C Y + A X + B Y + C Y + A X + C X + C Y + A Z + B Y + B Z + A X + B Y + B Z + B Y + B Y + B Z + C X + C Y + B Y + B Z + B X + A Z + B Y + C Y + B Y + B Y + A X + C X + B Y + C X + B Y + C Y + A X + A X + A Z + C Y + B Y + C Y + C X + B X + C X + C X + A X + A Z + B Y + B Y + B Y + A Z + B Y + B Y + B Y + B Y + B Y + B Y + B X + B Y + C Y + B Y + A Z + B Y + C X + C Y + B Z + C Z + B Y + A Y + C X + B Y + B Y + B Y + C X + A Y + C Z + B Y + C X + C Y + C Y + C Y + C X + C Y + B Z + B Y + C Y + C X + B Y + B Y + B X + C Y + B X + C Z + B Y + C X + B Z + C X + B Y + C X + B Y + C Y + C Y + A Z + C Y + C X + B Y + C X + B X + A Z + B Y + A Z + A Z + A Z + C Y + B X + A Y + C Y + B Y + B Y + C Y + C Y + C X + B X + A X + A Z + C X + A Y + B X + C Z + B Y + B Y + B X + C X + B Y + B Y + B Y + B X + B Y + C X + B Y + B Y + C Z + C Y + B Y + C Y + B Y + A Z + C Z + A Y + B Y + B Y + B Y + C Y + C Y + C Y + B Y + C Z + B Y + C Z + A Z + A Z + C Z + C Y + C Z + C Y + A Z + C X + B X + B Y + C Y + B Z + C Z + C X + B Y + A Z + B Y + C X + B Z + A X + B Y + A Z + C Z + C X + C X + C Y + B Y + B Y + A Z + A Z + B Y + B X + A Z + B Y + C Y + A X + C Z + B Y + B X + B Y + C Y + C Z + B Z + A Z + B Y + A X + C X + B Y + A Z + C X + B Z + C Y + C Y + C X + C X + C Y + B Y + B Y + B Z + B X + C X + B Z + C X + B X + C Z + C Z + C X + B Y + C Y + C X + B Y + A Z + C Y + C Z + C Z + C Y + B Y + A X + C Z + C X + B Y + C X + C Z + B Y + C Y + B Y + C Y + A Z + B Z + C Z + C X + B Z + B Z + B Y + A Y + C Y + C Y + B X + B X + B Y + B Y + B Y + C X + B Z + B Y + B Y + B Y + C X + A X + C Y + A X + B Y + B Y + B Y + B Y + B Y + C Y + C Y + B Y + B Y + B Y + B Y + C Y + B Y + C X + B Y + B Y + C X + A Z + A X + C Y + C Z + B Y + C X + B Y + B X + A Z + B X + B Y + B Y + A Z + B Y + B Y + B Y + B Z + A Z + A X + B Y + A Z + C Y + B Y + C X + B Y + C Y + B Y + B Y + C X + C Y + A Y + C X + C Y + B Y + A Y + A Z + C Z + A Y + A Z + B Y + C Y + C Y + B Y + B Y + B Y + B Y + A Z + B Y + B Y + B Y + C X + C X + B Y + C X + B Y + A Z + B Y + B X + C Z + C Y + A Y + B Y + C Y + B Y + C Y + C Y + C Y + C X + C Y + B Y + B Y + C Y + B Y + C Y + A Z + A X + B Y + A Z + B Y + C X + C X + B Y + C Z + B Y + B Y + C Y + B Y + C Z + A Y + B Y + C Y + B Y + A Z + C Y + B Z + C Y + C Y + C Z + B Y + C X + B Z + B Y + B Y + B Y + C Z + B Y + B Y + B Y + A Z + C X + B Z + B Y + B Y + C Y + B Y + C X + B Y + B Y + C Y + C X + C Y + B Y + B Y + C Y + B Y + A Y + B Y + A Z + B Y + B Y + B X + A Z + B Y + B Y + C Y + C X + C Z + A Z + A Z + C X + B Y + C Y + B Y + C X + B Y + B Y + C Y + C X + B Y + B Y + B Y + B Y + B Y + C X + B Z + B Z + A Z + B Z + B Y + B Z + B Y + C Y + A Z + A X + B Y + C Z + B X + A X + C Y + B Y + B Y + C Y + B Y + C Y + B Y + A Z + B Y + B Y + A Z + B Y + B Y + A Z + B Y + B Y + B Y + B Y + C Y + B Y + A X + A X + B Y + B Y + A Y + C Z + A Z + A Z + B Y + A Z + C Y + B Y + B Y + B Y + B Y + C Y + B Y + A X + B X + B Y + B Y + B Y + B Y + B X + C Y + B Y + B Y + B X + C Y + A Y + B Y + B Y + B Y + A X + B Z + C X + A X + C Z + B Y + B Y + B Y + C X + B Y + B Y + B Y + B Y + C Y + B Z + B Z + B Y + B Z + B Y + B Y + C Z + C Y + B Y + C Z + C Z + B Y + C X + A Y + B Y + B Z + A Z + B Y + C X + B Y + B Y + C Z + A Z + B Y + B X + B Y + C Y + B Y + B Z + B Y + B Y + C X + C X + C Z + B Y + B Y + B Y + A Z + A X + B Y + A Z + B Y + B Y + B Y + B Z + C X + C Z + B Y + B Y + B Y + C Z + B X + C Z + A X + B Y + C Y + B Y + A Z + A X + C X + B X + A Z + C X + B Y + C Y + B X + A Z + C Y + C Y + B Z + C X + B Y + C X + C Z + C Y + B Y + C Z + B Y + B Y + C X + B Y + B Y + B Y + B Y + B Y + B Y + C X + B Y + B Y + B Y + A Z + B Y + B Y + C Z + B Y + B Y + B Y + C X + A Z + B Z + C Y + C Y + B Y + A X + C Y + B Y + C Z + B Z + B Y + B Y + C Y + B Y + B Y + B Y + C Z + A X + B Y + C Y + A X + B Y + B Y + A X + B Y + A Y + C X + A Z + A Z + C Y + B Y + C Z + C Y + C Y + C Z + A Z + A X + C Z + B Y + C X + A Z + C X + B Y + B Y + B Y + C Z + C Y + C X + C Y + A Y + C X + A Z + A Z + B Z + C X + B Y + B Y + C X + A Z + C Z + C Z + B Y + B Y + A Y + C X + B Z + B Y + B Y + C X + C X + C Z + C Z + B Y + B Y + B X + B Y + B Y + C Z + C Y + C Z + B Y + B Y + B Y + C Y + B X + C X + A Z + C X + C X + C Y + B Y + B Y + C Y + B Z + B Z + C X + C Y + B Y + B Z + B Y + B X + A Z + C X + B Z + A Z + C X + B Y + C Y + C Y + B Y + B Y + B Y + B X + A X + B Y + A X + A Z + C Y + B Y + B Y + B Y + B Y + B Y + C Z + B X + B Y + C X + A Z + B Y + B Y + A Z + B Y + C Y + C Z + C X + C Y + B Y + B Y + B Z + B Y + A X + C Y + B Y + A X + B Y + C X + A Z + B Y + C X + A Z + B Y + C X + C Y + C X + B Z + C Z + B Y + C Y + C X + C Y + B Z + B X + A X + C Z + B Y + B Y + C Y + B Z + C X + C X + B Y + B Y + C Y + B X + B Y + C Y + B Y + B Y + A Z + B Y + B Y + B Y + A X + A Z + B Z + B Z + B Y + A Z + B Y + C Y + B Y + C X + B X + B Y + B Y + B X + C Z + B Y + C Z + C X + B Y + C Z + B Y + C Y + B Z + C Y + C Y + C Z + C Z + A X + B Y + A Z + B Y + B X + A X + B Y + B Y + B Y + C Y + B Y + B X + B Z + C Z + B X + B Z + B Y + C Y + B Y + B Z + C X + A Z + B X + B Z + C X + C Z + B Y + A Z + C X + C Y + B Z + B Y + C Y + B Y + C Y + B Y + B Y + B Y + C Y + B Y + C Y + C X + C Z + B Y + B Y + B X + C Z + B X + A Z + C Y + A Z + C X + C Y + B Y + C Z + B Z + C Z + C Y + C X + B Y + C Z + C X + B Y + B Y + B Y + B X + B Y + B Y + C X + A X + B Z + C X + C Z + B Y + C Y + B Z + C Z + B Y + C X + B Y + B Y + A Z + C Z + B Y + C Z + C X + B Y + B Y + C X + C X + C Y + B Y + A X + A Z + B Y + C X + B Y + B Y + C Y + B Y + A Z + A Z + C X + C Z + C X + C X + A X + B Y + B Y + C Y + C Z + C Y + B Z + C Y + B Y + B Y + B Y + C Y + B Z + B Y + B Y + B X + C Y + C Y + B Y + A X + C X + A X + C Z + C Y + A Y + B Y + B Y + B Z + C X + C X + B Y + A X + B Y + A Z + B Y + A Z + C X + C X + B Y + B Y + B Y + B Y + A X + B Y + B Z + C Y + C X + C Z + C Z + B Y + C Z + B Y + B Y + C X + B Y + A X + A Z + B Y + A Z + C X + B Y + C Y + B Z + C Z + B Y + B Y + B Y + B Y + C Y + C Z + B X + B Y + A Y + C Y + B Z + B Y + C Y + A Z + B Y + B Y + C Y + C Y + A Y + C Y + A Z + C Y + B X + B Y + B Y + C Y + A Z + C Y + A Z + B Y + B Y + B Y + B Y + A X + C Y + A Z + B Y + B Y + B Y + B Y + B Z + C Z + C Y + C X + B Y + C X + B Y + B Y + B Y + B Y + A Z + B Y + C Y + C Y + A Z + A X + B Y + C Y + C Y + B Y + C Y + C Y + C Y + C Z + A Z + C X + C Y + C X + B Y + B Y + C X + C Z + C X + C Z + B X + B Y + C Z + B Z + A Z + C Y + B Z + C Y + B Y + A X + B Y + A Z + B Y + A X + B Y + B X + B Z + B X + B Y + B Y + B Y + C X + B Y + B X + C X + B Y + B Z + B Y + C Y + B Y + B Y + C X + A Z + C X + B Y + C Y + C Z + B Y + C Z + B Y + B Y + B Y + B Y + C Z + C X + C Y + C Z + B X + A Z + A Z + B Y + B Z + C Y + A X + B Y + B Y + A Z + B Y + B Y + B Y + B Y + A Z + C Z + B Z + C Y + A Z + C Y + B Y + B Y + B Y + B Z + B Y + C X + C Z + B X + C X + B Y + C Z + C X + B Y + A Z + A Z + B Y + B Y + B Y + C X + A Y + B Y + B Y + A Z + A Z + C Z + C Y + B Y + B Y + A X + B Z + A X + B Y + A Z + B Y + C X + B Y + A Y + B Y + B Z + B Y + B Z + B Y + B Y + C Y + C Y + B Y + C X + C Z + B Y + B Y + B Y + C Z + A Z + C X + B Y + B Z + B Y + C Y + B Y + C X + B Y + B Y + C Y + B Y + B Y + B Y + B Y + B Y + B Y + B X + B Y + B Y + C X + B Y + B Z + A Z + A Z + C X + B X + B X + C Y + C Z + B Y + C X + A X + B Y + C X + C Z + C X + B Y + B Y + C Y + B Y + B Y + B Y + A Z + C Z + C X + B Y + B Y + A X + B Y + C Y + B Y + B Y + C Y + B X + B X + A X + C Y + C Z + C Y + B Y + B Y + C X + A X + A X + C X + B Y + C X + B Y + B Y + B Y + C Y + A Z + B Z + A Z + B Y + B X + C Y + B Z + B Y + A Z + B Y + C Y + B Y + C Y + A X + B Y + B Y + B Y + C X + A Z + C Y + B Y + B Y + B Y + C X + B Y + C Y + B Y + B X + C X + B Y + B Y + C Y + C X + C Z + C Z + B Y + B Y + B Y + B X + C X + B X + A Y + A Z + C Y + A X + B Y + B Y + B Y + A Z + C Y + C X + C Y + C Z + A Z + B Y + B Y + B Y + B Y + A Z + B Y + A Z + B Y + B Y + C Y + C Z + C Y + A Z + C Y + B Y + C Y + B X + B Y + A X + C Z + C Z + A X + C X + C Z + C X + C X + B Y + A X + A Z + C Y + B Y + C X + B Y + B Y + B X + C Y + C Z + B Y + B Z + A Z + C Y + B Y + A Z + B Y + C X + C X + B Z + C Y + B X + B Y + C Y + B Z + A Z + C X + C Y + C X + C Z + B Z + C Z + B Y + B X + B Y + B X + B Y + B Y + B Y + B Y + C X + C X + C Y + B Z + C X + B Y + B Y + B Z + C Z + C Y + B Y + B Y + B Y + C X + B Z + B Y + B X + B Y + C Y + C X + C Z + C X + C Y + B Y + B Y + B X + B Y + C X + B X + A X + B Y + C Y + B Y + A X + C Y + B Z + B Z + C X + C Z + C X + B Y + C Y + C Y + B Y + C Z + B Y + C Y + B Y + C Y + A Z + B Z + C X + C X + B Y + B Y + B Z + B Y + B Z + A X + C X + C X + B Y + C X + A Z + C Y + B Y + A Z + C Z + B X + C Y + C X + C X + A Z + B Y + B Y + C Z + B Y + A Y + C Y + B Y + B X + B Z + C X + B Y + B X + C Z + B Y + B X + B Y + B Y + B Y + A Z + A Z + B Z + A Z + C Y + C Z + B X + C X + A Z + C X + B Y + B Y + A X + B X + B Y + B X + B X + A Y + A Z + C X + B Z + B Z + C Y + C Y + B Y + B Y + B Y + A Z + A Z + B Y + B Y + C Y + C Y + C Y + C Z + C X + C Y + B Y + B X + B Y + A Y + A X + C Y + B Y + A Z + B Y + B Y + C X + C X + B Y + B Y + C Y + A Z + B Y + C Y + C Z + C Z + C Y + A Y + B Y + B Y + C Y + B X + C Z + C Z + C Z + B Y + B Y + B Y + C Y + A Z + B Y + A Z + B Y + A Z + C X + C Z + C Y + B Y + A Z + B Y + B Y + C Z + B Y + C X + B Y + C Y + C Y + B Y + B Y + A X + C Z + B Y + C Y + C X + B Y + B Y + B Y + B Z + A Z + B Y + B Y + B Y + A Z + B Y + A X + B Y + B Y + B Y + C Y + C X + C Y + A Z + B Y + C Y + B Y + C Y + C Y + C Y + A X + C Z + B Y + B Y + C Z + B Y + B Y + C Z + B Z + B Y + C Y + B Y + B Y + B Y + B Y + B X + C X + C Y + B Y + A Z + B Y + A X + B Y + B Y + B Y + B Y + C Z + C Z + B Y + A Z + B Y + C X + C X + C Y + B X + A X + B X + B Y + C X + C Z + C Y + C Y + B Y + C Z + B Y + B Y + C Z + A X + B Y + C Z + B Z + B Y + C X + C X + B Y + B Y + B X + C Z + A Z + A X + B Y + C X + B Y + B Y + C Z + B Z + C Y + B Y + B X + C X + C Z + B Z + B Z + C Y + B Y + A X + B Y + B Y + C X + B X + A Z + B Y + A Z + B Y + B Y + A Z + C X + C X + B Y + B X + B Y + A Z + C Y + C Z + B Y + B Y + A X + B Y + C Y + C Y + B Y + A X + B Y + B Y + A Z + C X + C X + C Y + B Y + A X + B Y + B Y + C Y + B Y + B Y + B Y + B Z + B Y + C Y + C Y + B Y + C X + C X + B Y + C Y + B Y + C X + B Y + B Z + B Y + A Z + A Z + C X + A Z + A Z + B Y + B X + C Z + B Y + B Y + B Y + B Y + B Y + C X + C Y + B Y + A X + C X + C X + C Y + B Y + C X + C X + C Z + B Z + C Y + C X + B Y + B Y + C X + B X + C Z + B Y + B Y + C Y + A Z + C Y + C X + C Y + B Y + B Y + C X + C Y + C Y + C X + B Z + B Z + B Y + B Y + C Y + B Y + C X + A Z + A X + C Z + B Y + C Y + C Y + B Y + B Y + C Y + B Y + """; + + #endregion } \ No newline at end of file diff --git a/StringExtensions.cs b/StringExtensions.cs new file mode 100644 index 0000000..92fbc01 --- /dev/null +++ b/StringExtensions.cs @@ -0,0 +1,17 @@ +namespace AdventOfCode; + +public static class StringExtensions +{ + public static IEnumerable ReadAllLines(this StringReader reader) + { + while (reader.ReadLine() is { } line) + { + yield return line; + } + } + + public static IEnumerable ReadAllLines(this string text) + { + return new StringReader(text).ReadAllLines(); + } +} \ No newline at end of file