From f19e9b2a8b6f987fee6fad8d9bde8b5434326279 Mon Sep 17 00:00:00 2001 From: Amatsugu Date: Sat, 3 Dec 2022 00:53:55 -0500 Subject: [PATCH] Runner Cleanup --- AdventOfCode/AdventOfCode.csproj | 6 ++ .../Problems/AOC2022/Day1/CalorieCounting.cs | 29 ++------ .../AOC2022/Day2/RockPaperScissors.cs | 16 +---- AdventOfCode/Program.cs | 8 +-- AdventOfCode/Runner/AOCRunner.cs | 59 +++++++++++---- AdventOfCode/Runner/IProblemBase.cs | 27 ------- AdventOfCode/Runner/Problem.cs | 71 +++++++++++++++++++ 7 files changed, 131 insertions(+), 85 deletions(-) delete mode 100644 AdventOfCode/Runner/IProblemBase.cs create mode 100644 AdventOfCode/Runner/Problem.cs diff --git a/AdventOfCode/AdventOfCode.csproj b/AdventOfCode/AdventOfCode.csproj index 3c23274..073e1ca 100644 --- a/AdventOfCode/AdventOfCode.csproj +++ b/AdventOfCode/AdventOfCode.csproj @@ -14,4 +14,10 @@ + + + + + + diff --git a/AdventOfCode/Problems/AOC2022/Day1/CalorieCounting.cs b/AdventOfCode/Problems/AOC2022/Day1/CalorieCounting.cs index 64da24d..f686477 100644 --- a/AdventOfCode/Problems/AOC2022/Day1/CalorieCounting.cs +++ b/AdventOfCode/Problems/AOC2022/Day1/CalorieCounting.cs @@ -43,6 +43,8 @@ internal class CalorieCounting : Problem _mostestElf = FlaresFood .Select((x, idx) => (sum: x.Sum(), idx)) .MaxBy(x => x.sum); + + Part1 = _mostestElf.Value.ToString(); } public override void CalculatePart2() @@ -51,29 +53,6 @@ internal class CalorieCounting : Problem .Select((x, idx) => (sum: x.Sum(), idx)) .OrderByDescending(e => e.sum) .Take(3); - } - - - public override void PrintPart1() - { - if (_mostestElf == null) - { - Console.WriteLine("Part 1 has not been calculated"); - return; - } - Console.WriteLine($"Mostest: {_mostestElf}"); - } - - public override void PrintPart2() - { - if(_mostestElves == null) - { - Console.WriteLine("Part 2 has not been calculated"); - return; - } - Console.WriteLine("Top Elves"); - foreach (var elf in _mostestElves) - Console.WriteLine($"\t{elf}"); - Console.WriteLine($"Total {_mostestElves.Sum(e => e.sum)}"); - } + Part2 = _mostestElves.Sum(e => e.sum).ToString(); + } } diff --git a/AdventOfCode/Problems/AOC2022/Day2/RockPaperScissors.cs b/AdventOfCode/Problems/AOC2022/Day2/RockPaperScissors.cs index be74960..9434ee9 100644 --- a/AdventOfCode/Problems/AOC2022/Day2/RockPaperScissors.cs +++ b/AdventOfCode/Problems/AOC2022/Day2/RockPaperScissors.cs @@ -7,8 +7,6 @@ namespace AdventOfCode.Problems.AOC2022.Day2; internal class RockPaperScissors : Problem { private string[] _lines; - private int _part1Score; - private int _part2Score; public RockPaperScissors() { @@ -31,7 +29,7 @@ internal class RockPaperScissors : Problem totalScore += GetMoveValue(response); totalScore += GetResult(move, response); } - _part1Score = totalScore; + Part1 = totalScore.ToString(); } private static int GetMoveValue(char move) @@ -98,16 +96,6 @@ internal class RockPaperScissors : Problem score += GetResponseValue(move, result); score += GetResultValue(result); } - _part2Score = score; - } - - public override void PrintPart1() - { - Console.WriteLine($"P1: {_part1Score}"); - } - - public override void PrintPart2() - { - Console.WriteLine($"P2: {_part2Score}"); + Part2 = score.ToString(); } } \ No newline at end of file diff --git a/AdventOfCode/Program.cs b/AdventOfCode/Program.cs index 781e2ca..09b57ea 100644 --- a/AdventOfCode/Program.cs +++ b/AdventOfCode/Program.cs @@ -1,14 +1,12 @@ -using AdventOfCode.Problems.AOC2022.Day1; -using AdventOfCode.Problems.AOC2022.Day2; -using AdventOfCode.Runner; +using AdventOfCode.Runner; namespace AdventOfCode; internal class Program { - static void Main(string[] args) + private static void Main(string[] args) { var runner = new AOCRunner(); runner.RenderMenu(); } -} +} \ No newline at end of file diff --git a/AdventOfCode/Runner/AOCRunner.cs b/AdventOfCode/Runner/AOCRunner.cs index 41acafa..f0a5e19 100644 --- a/AdventOfCode/Runner/AOCRunner.cs +++ b/AdventOfCode/Runner/AOCRunner.cs @@ -36,16 +36,38 @@ public class AOCRunner public void RenderMenu() { - var years = _loadedProblems.Keys.OrderByDescending(k => k); var defaultYear = DateTime.Now.Year.ToString(); - Console.WriteLine($"Select a Year: (blank is {defaultYear})"); + RenderYears(defaultYear); + + Console.Write("Select a Year: "); + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine($"(blank is {defaultYear})"); + Console.ForegroundColor = ConsoleColor.Gray; var inputYear = Console.ReadLine(); if (string.IsNullOrWhiteSpace(inputYear)) inputYear = defaultYear; - RenderYearMenu(defaultYear); + RenderYearMenu(inputYear); + } + + private void RenderYears(string defaultYear) + { + var years = _loadedProblems.Keys.OrderByDescending(k => k); + + foreach (var year in years) + { + Console.ForegroundColor = ConsoleColor.Red; + if (defaultYear == year) + Console.Write("\t> "); + else + Console.Write("\t "); + + Console.Write($"{year} "); + Console.ForegroundColor = ConsoleColor.Gray; + Console.WriteLine($"- {_loadedProblems[year].Count} Problems"); + } } private void RenderYearMenu(string year) @@ -55,6 +77,7 @@ public class AOCRunner Console.WriteLine($"No problems for {year} exist"); return; } + var defaultDay = DateTime.Now.Day; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"{year}:"); Console.ForegroundColor = ConsoleColor.Gray; @@ -63,15 +86,21 @@ public class AOCRunner { var (info, _) = days[i]; Console.ForegroundColor = ConsoleColor.Magenta; - Console.Write($"\t [{i}]"); + if(i == defaultDay) + Console.Write($"\t> [{i}]"); + else + Console.Write($"\t [{i}]"); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine($" - Day {info.Day} - {info.Name}"); } Console.WriteLine(); - var defaultDay = DateTime.Now.Day; - Console.WriteLine($"Select Day Index: (blank is {defaultDay})"); + Console.Write($"Select Day Index: "); + Console.ForegroundColor = ConsoleColor.Magenta; + Console.WriteLine($"(blank is {defaultDay})"); + Console.ForegroundColor = ConsoleColor.Gray; + var inputDay = Console.ReadLine(); if(!int.TryParse(inputDay, out var parsedDay)) @@ -88,20 +117,22 @@ public class AOCRunner Console.Clear(); var (info, problemType) = yearList[dayIndex]; + Console.Write("Problem: "); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine($"\t{info.Name}"); + Console.ForegroundColor = ConsoleColor.DarkRed; + Console.WriteLine($"\t\t{info.Year} - Day {info.Day}"); - Console.WriteLine($"Problem: \t{info.Name}"); - Console.WriteLine($"\t\t{info.Year} - {info.Day}"); + Console.ForegroundColor = ConsoleColor.Gray; - - var problem = Activator.CreateInstance(problemType) as Problem; - if(problem == null ) { + if (Activator.CreateInstance(problemType) is not Problem problem) + { Console.WriteLine("Failed to create problem isntance"); return; } - Console.WriteLine("Loading Input data..."); - problem.LoadInput(); - Console.WriteLine(); + Console.WriteLine("Loading Input data...\n"); + problem.LoadInput(); RunPart("Calculating Part 1", problem.CalculatePart1); RunPart("Calculating Part 2", problem.CalculatePart2); diff --git a/AdventOfCode/Runner/IProblemBase.cs b/AdventOfCode/Runner/IProblemBase.cs deleted file mode 100644 index 9d121b0..0000000 --- a/AdventOfCode/Runner/IProblemBase.cs +++ /dev/null @@ -1,27 +0,0 @@ -using AdventOfCode.Runner.Attributes; - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; - -namespace AdventOfCode.Runner; -public abstract class Problem -{ - public abstract void LoadInput(); - public abstract void CalculatePart1(); - public abstract void PrintPart1(); - public abstract void CalculatePart2(); - public abstract void PrintPart2(); - - protected string GetInputFile(string filename) - { - var info = this.GetType().GetCustomAttribute(); - if (info == null) - return filename; - - return Path.Combine($"Problems/AOC{info.Year}/Day{info.Day}", filename); - } -} \ No newline at end of file diff --git a/AdventOfCode/Runner/Problem.cs b/AdventOfCode/Runner/Problem.cs new file mode 100644 index 0000000..ccd794c --- /dev/null +++ b/AdventOfCode/Runner/Problem.cs @@ -0,0 +1,71 @@ +using AdventOfCode.Runner.Attributes; + +using System.Reflection; + +namespace AdventOfCode.Runner; + +public abstract class Problem +{ + protected string? Part1 { get; set; } + protected string? Part2 { get; set; } + + public abstract void LoadInput(); + + public abstract void CalculatePart1(); + + public virtual void PrintPart1() { + Console.ForegroundColor = ConsoleColor.Gray; + if (Part1 == null) + { + Console.Write("Part 1: "); + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine("No Solution"); + } + else + { + Console.Write("Part 1: "); + Console.ForegroundColor = ConsoleColor.Blue; + Console.WriteLine($"{Part1}"); + } + Console.ForegroundColor = ConsoleColor.Gray; + } + + public abstract void CalculatePart2(); + + public virtual void PrintPart2() + { + Console.ForegroundColor = ConsoleColor.Gray; + if (Part2 == null) + { + Console.Write("Part 2: "); + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine("No Solution"); + } + else + { + Console.Write("Part 2: "); + Console.ForegroundColor = ConsoleColor.Blue; + Console.WriteLine($"{Part2}"); + } + Console.ForegroundColor = ConsoleColor.Gray; + } + + protected string GetInputFile(string filename = "input.txt") + { + var info = this.GetType().GetCustomAttribute(); + if (info == null) + return filename; + + return Path.Combine($"Problems/AOC{info.Year}/Day{info.Day}", filename); + } + + protected string[] ReadInputLines(string filename = "input.txt") + { + return File.ReadAllLines(GetInputFile(filename)); + } + + protected string ReadInputText(string filename = "input.txt") + { + return File.ReadAllText(GetInputFile(filename)); + } +} \ No newline at end of file