public static void Main() { try { var dayTypes = AssemblyScanner.GetDayTypes(); var years = dayTypes.GetYears(); while (true) { var yearNo = GetNumber(years, ConsolePrinter.PrintEnterYear); ConsolePrinter.PrintHeader(yearNo); var days = dayTypes.GetDays(yearNo); while (true) { try { var dayNo = GetNumber(days, ConsolePrinter.PrintEnterDay); var dayType = dayTypes.First(x => x.Name.Contains("AoC" + yearNo) && x.Name.Contains("Day" + dayNo.ToString("00"))); var day = (DayBase)Activator.CreateInstance(dayType); var dayRunner = new DayRunner(day); dayRunner.Run(); } catch (TerminationRequestedException) { break; } } } } catch (TerminationRequestedException) { } }