public static void Main() { int year; int day; int part; Console.WriteLine("Advent Of Code"); Console.WriteLine("===================================="); try { EnvironmentRepository environmentRepository = new EnvironmentRepository(); string yearEnv = environmentRepository.ReadYearInput(); string dayEnv = environmentRepository.ReadDayInput(); string partEnv = environmentRepository.ReadPartInput(); if (string.IsNullOrEmpty(yearEnv)) { Console.WriteLine("Task year is not set."); return; } if (string.IsNullOrEmpty(dayEnv)) { Console.WriteLine("Task day is not set."); return; } if (string.IsNullOrEmpty(partEnv)) { Console.WriteLine("Task part is not set."); return; } year = ParseYearInput(yearEnv); day = ParseDayInput(dayEnv); part = ParsePartInput(partEnv); } catch (ArgumentException e) { Console.WriteLine(e.Message); return; } Type taskType = Type.GetType($"App.Tasks.Year{year}.Day{day}.Part{part}"); if (taskType is null) { Console.WriteLine($"Task with year: {year}, day: {day} and part: {part} doesn't exist."); return; } string input = ReadInputHelper.ReadTaskInput(year, day); object task = Activator.CreateInstance(taskType); MethodInfo solutionMethod = taskType.GetMethod("Solution"); Stopwatch stopwatch = Stopwatch.StartNew(); var result = solutionMethod.Invoke(task, new object[] { input }); stopwatch.Stop(); Console.WriteLine($"Execution time: {stopwatch.ElapsedMilliseconds} miliseconds"); Console.WriteLine($"Result: {result}"); }