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 => 2; public override string Name => "Rock Paper Scissors"; public override void RunPart1(bool display = true) { 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); } if (display) { AnsiConsole.MarkupLine($"[green]Total score: [yellow]{score}[/][/]"); } } public override void RunPart2(bool display = true) { 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; } if (display) { 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 }