public static int Main(string[] args) { if (1 != args.Length) { Console.WriteLine("Arguments (1): puzzleDay"); return(-1); } if (!Int32.TryParse(args[0], out int day)) { Console.WriteLine("Could not parse puzzle day."); return(-1); } if (day <= 0 || day > MAX_DAY) { Console.WriteLine($"Please select a day between 1 and {MAX_DAY}"); return(-1); } string assemblyLocation = Assembly.GetAssembly(typeof(Program)).Location; string projectRootDirectory = Directory .GetParent(assemblyLocation) .Parent .Parent .Parent .FullName; string puzzleFileName = string.Format("Day{0:D2}.txt", day); string puzzleFilePath = Path.Combine(projectRootDirectory, "Puzzles", puzzleFileName); if (!File.Exists(puzzleFilePath)) { Console.WriteLine("Puzzle Input Not Found."); return(-1); } Solver solver = CreateSolver(day); if (solver is not Solver) { Console.WriteLine("Solver creation failed."); return(-1); } // Initialisation. TimeSpan ts; string solution; Stopwatch stopwatch = new Stopwatch(); List <string> input = PuzzleReader.GetInputLines(puzzleFilePath).ToList(); // Part 1. stopwatch.Start(); solution = solver.SolvePartA(input); stopwatch.Stop(); ts = stopwatch.Elapsed; Console.WriteLine($"Part 1: {solution}"); Console.WriteLine("Time 1: {0:D2}.{1:D3} seconds.", ts.Seconds, ts.Milliseconds); // Part 2. stopwatch.Restart(); solution = solver.SolvePartB(input); stopwatch.Stop(); ts = stopwatch.Elapsed; Console.WriteLine($"Part 2: {solution}"); Console.WriteLine("Time 2: {0:D2}.{1:D3} seconds.", ts.Seconds, ts.Milliseconds); return(0); }