Пример #1
0
        private async Task RunDay(int part)
        {
            StartNewLog(SelectedDay.Year, SelectedDay.Day);

            var input = GetInput(SelectedDay);

            LogMessage($"====== Input ======");
            LogMessage(input);
            LogMessage($"======= Running Day {SelectedDay.Year}.{SelectedDay.Day} Part {part} =======");

            var day = GetDayInstance(SelectedDay);

            var dayTask = new Task <(string result, long elapsed)>(() => RunDay(input, day, part));

            dayTask.Start();

            // TODO: disable buttons and show spinner

            await dayTask;

            LogMessage($"========= DONE (Elapsed: {dayTask.Result.elapsed}ms) =========");
            LogMessage($"ANSWER: {dayTask.Result.result}");

            Clipboard.SetText(dayTask.Result.result);

            _lastRunDay    = SelectedDay;
            _lastRunPart   = part;
            _lastRunInput  = input;
            _lastRunOutput = dayTask.Result.result;
        }
        private void CreateTestFile(string testName, DayAttribute testDay, int testPart, string input, string output)
        {
            var fileName = GetTestFileName(testName, testDay, testPart);

            Directory.CreateDirectory(AdventConfig.TestFileFolder);
            File.WriteAllText(fileName, CreateTestFileContents(input, output));

            LogMessage($"Test Created: {fileName}");
        }
Пример #3
0
        private BaseDay GetDayInstance(DayAttribute day)
        {
            var dayType = GetDayType(day);

            var instance = (BaseDay)Activator.CreateInstance(dayType);

            instance.Log = LogMessage;

            return(instance);
        }
Пример #4
0
        private void DownloadInput(DayAttribute day, string inputFile)
        {
            var url = $"https://adventofcode.com/{day.Year}/day/{day.Day}/input";

            if (!File.Exists(AdventConfig.SessionCookieFile))
            {
                throw new ArgumentException($"Cannot find Session Cookie file, please check AdventConfig.cs [{AdventConfig.SessionCookieFile}]");
            }

            var sessionCookie = File.ReadAllText(AdventConfig.SessionCookieFile);

            using var client = new WebClient();
            client.Headers.Add(HttpRequestHeader.Cookie, sessionCookie);
            client.DownloadFile(url, inputFile);
        }
Пример #5
0
        private string GetInput(DayAttribute day)
        {
            if (InputText?.Trim().Length > 0)
            {
                return(InputText);
            }

            Directory.CreateDirectory(AdventConfig.InputFileFolder);

            var inputFileName = $"{day.ToString()}.txt";
            var inputFile     = Path.Combine(AdventConfig.InputFileFolder, inputFileName);

            if (!File.Exists(inputFile))
            {
                DownloadInput(day, inputFile);
            }

            InputText = File.ReadAllText(inputFile);
            NotifyChange(nameof(InputText));

            return(InputText);
        }
Пример #6
0
 private Type GetDayType(DayAttribute day)
 {
     return(GetDayTypes().Single(t => t.GetCustomAttribute <DayAttribute>().Year == day.Year &&
                                 t.GetCustomAttribute <DayAttribute>().Day == day.Day));
 }
        private string GetTestFileName(string testName, DayAttribute testDay, int testPart)
        {
            var fileName = $"{testDay.Year}-{testDay.Day}-{testPart}-{testName}.test";

            return(Path.Combine(AdventConfig.TestFileFolder, fileName));
        }
        private bool IsTestNameUnique(string testName, DayAttribute testDay, int testPart)
        {
            var fileName = GetTestFileName(testName, testDay, testPart);

            return(!File.Exists(fileName));
        }