diff --git a/AOC.Common/Day.cs b/AOC.Common/Day.cs index e9a7787..d61b869 100644 --- a/AOC.Common/Day.cs +++ b/AOC.Common/Day.cs @@ -22,16 +22,25 @@ public abstract class Day Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"input{Year}/{(UseTestInput ? "test" : "day")}{DayNumber,2:00}.in"); + public abstract void ProcessInput(); + public abstract object Part1(); public abstract object Part2(); private void AllParts(bool verbose = true) { - Console.WriteLine($"{Year} Day {DayNumber,2}: {PuzzleName}"); + Console.Write($"{Year} Day {DayNumber,2}: {PuzzleName,-31}"); + var s = Stopwatch.StartNew(); + ProcessInput(); + s.Stop(); + Console.WriteLine($"{s.ScaleMilliseconds()}ms elapsed processing input"); + s.Reset(); + + s.Start(); var part1 = Part1(); s.Stop(); - Console.Write($"Part 1: {part1,-25} "); + Console.Write($"Part 1: {part1,-35} "); Console.WriteLine(verbose ? $"{s.ScaleMilliseconds()}ms elapsed" : ""); s.Reset(); @@ -39,7 +48,7 @@ public abstract class Day s.Start(); var part2 = Part2(); s.Stop(); - Console.Write($"Part 2: {part2,-25} "); + Console.Write($"Part 2: {part2,-35} "); Console.WriteLine(verbose ? $"{s.ScaleMilliseconds()}ms elapsed" : ""); Console.WriteLine(); diff --git a/AOC.Test/Common.cs b/AOC.Test/Common.cs index ab60ee6..2176332 100644 --- a/AOC.Test/Common.cs +++ b/AOC.Test/Common.cs @@ -5,13 +5,15 @@ public static class Common public static void CheckDay(Type dayType, string part1, string part2, bool testInput = false) { Day.UseTestInput = testInput; - var s = Stopwatch.StartNew(); var day = Activator.CreateInstance(dayType) as Day; - s.Stop(); Assert.IsNotNull(day, "failed to instantiate day object"); Assert.IsTrue(File.Exists(day.FileName), $"File.Exists(day.FileName) {day.FileName}"); Console.Write($"{day.Year} Day {day.DayNumber,2}: {day.PuzzleName,-25} "); - Console.WriteLine($"{s.ScaleMilliseconds()} ms elapsed in constructor"); + + var s = Stopwatch.StartNew(); + day.ProcessInput(); + s.Stop(); + Console.WriteLine($"{s.ScaleMilliseconds()} ms elapsed processing input"); // part 1 s.Reset(); diff --git a/AOC2015/Day01.cs b/AOC2015/Day01.cs index 8c27f11..17db815 100644 --- a/AOC2015/Day01.cs +++ b/AOC2015/Day01.cs @@ -6,6 +6,10 @@ public class Day01 : Day { } + public override void ProcessInput() + { + } + public override object Part1() { var floor = 0; diff --git a/AOC2015/Day02.cs b/AOC2015/Day02.cs index d6e2bd7..0c154f9 100644 --- a/AOC2015/Day02.cs +++ b/AOC2015/Day02.cs @@ -5,16 +5,20 @@ namespace AOC2015; /// public sealed class Day02 : Day { - private readonly List> _gifts; + private List>? _gifts; public Day02() : base(2015, 2, "I Was Told There Would Be No Math") + { + } + + public override void ProcessInput() { _gifts = Input.Select(line => line.Split('x').Select(int.Parse).ToList()).ToList(); } public override object Part1() { - return _gifts.Sum(gift => + return _gifts!.Sum(gift => { var biggestDimension = gift.IndexOf(gift.Max()); @@ -33,7 +37,7 @@ public sealed class Day02 : Day public override object Part2() { - return _gifts.Sum(gift => + return _gifts!.Sum(gift => { var biggestDimension = gift.IndexOf(gift.Max()); var bowArea = gift.Aggregate(1, (i, i1) => i * i1); diff --git a/AOC2015/Day03.cs b/AOC2015/Day03.cs index bb1fe27..4209db9 100644 --- a/AOC2015/Day03.cs +++ b/AOC2015/Day03.cs @@ -9,6 +9,10 @@ public sealed class Day03 : Day { } + public override void ProcessInput() + { + } + public override object Part1() { int x = 0, y = 0; diff --git a/AOC2015/Day04.cs b/AOC2015/Day04.cs index 0b41ae4..57fcc12 100644 --- a/AOC2015/Day04.cs +++ b/AOC2015/Day04.cs @@ -7,22 +7,25 @@ namespace AOC2015; /// public sealed class Day04 : Day { - private readonly string _key; + private string? _key; public Day04() : base(2015, 4, "The Ideal Stocking Stuffer") + { + } + + public override void ProcessInput() { _key = Input.First(); } public override object Part1() { - var md5 = MD5.Create(); var counter = 0; while (true) { - var hash = md5.ComputeHash(Encoding.ASCII.GetBytes(_key + counter)); - if (BitConverter.ToString(hash).Replace("-", "").StartsWith("00000")) + var hash = MD5.HashData(Encoding.ASCII.GetBytes(_key + counter)); + if (BitConverter.ToString(hash).Replace("-", "").StartsWith("00000")) return counter; counter++; } @@ -30,12 +33,11 @@ public sealed class Day04 : Day public override object Part2() { - var md5 = MD5.Create(); var counter = 0; while (true) { - var hash = md5.ComputeHash(Encoding.ASCII.GetBytes(_key + counter)); + var hash = MD5.HashData(Encoding.ASCII.GetBytes(_key + counter)); if (BitConverter.ToString(hash).Replace("-", "").StartsWith("000000")) return counter; counter++; diff --git a/AOC2015/Day05.cs b/AOC2015/Day05.cs index d1f747f..7cd0ffa 100644 --- a/AOC2015/Day05.cs +++ b/AOC2015/Day05.cs @@ -5,9 +5,13 @@ namespace AOC2015; /// public sealed partial class Day05 : Day { - private readonly List _strings; private static readonly List Vowels = new() { 'a', 'e', 'i', 'o', 'u' }; - + private List _strings = new(); + + public Day05() : base(2015, 5, "Doesn't He Have Intern-Elves For This?") + { + } + [GeneratedRegex(@"(.)\1")] private static partial Regex DoubleLetter(); @@ -17,7 +21,7 @@ public sealed partial class Day05 : Day [GeneratedRegex(@"(..).*\1")] private static partial Regex TwoPairs(); - public Day05() : base(2015, 5, "Doesn't He Have Intern-Elves For This?") + public override void ProcessInput() { _strings = Input.Where(line => !string.IsNullOrEmpty(line)).ToList(); } diff --git a/AOC2015/Day06.cs b/AOC2015/Day06.cs index 73a4944..4dc3677 100644 --- a/AOC2015/Day06.cs +++ b/AOC2015/Day06.cs @@ -5,13 +5,17 @@ namespace AOC2015; /// public sealed partial class Day06 : Day { + private readonly Dictionary<(int x, int y), int> _brightnessGrid = new(); + private readonly Dictionary<(int x, int y), bool> _lightGrid = new(); + + public Day06() : base(2015, 6, "Probably a Fire Hazard") + { + } + [GeneratedRegex(@"(\d+),(\d+) through (\d+),(\d+)")] private static partial Regex Coords(); - private readonly Dictionary<(int x, int y), bool> _lightGrid = new(); - private readonly Dictionary<(int x, int y), int> _brightnessGrid = new(); - - public Day06() : base(2015, 6, "Probably a Fire Hazard") + public override void ProcessInput() { } diff --git a/AOC2015/Day07.cs b/AOC2015/Day07.cs index ee5ec2c..7de459e 100644 --- a/AOC2015/Day07.cs +++ b/AOC2015/Day07.cs @@ -5,13 +5,17 @@ namespace AOC2015; /// public sealed class Day07 : Day { - private readonly Dictionary _wires = new(); private readonly Dictionary> _actions = new(); + private readonly Dictionary _wires = new(); public Day07() : base(2015, 7, "Some Assembly Required") { } + public override void ProcessInput() + { + } + public override object Part1() { ProcessInstructions(); diff --git a/AOC2015/Day08.cs b/AOC2015/Day08.cs index bcf099e..ff7c7db 100644 --- a/AOC2015/Day08.cs +++ b/AOC2015/Day08.cs @@ -5,10 +5,14 @@ namespace AOC2015; /// public sealed partial class Day08 : Day { + public Day08() : base(2015, 8, "Matchsticks") + { + } + [GeneratedRegex(@"^""(\\x..|\\.|.)*""$")] private static partial Regex CharSet(); - public Day08() : base(2015, 8, "Matchsticks") + public override void ProcessInput() { } diff --git a/AOC2015/Day09.cs b/AOC2015/Day09.cs index 2aa2795..be9696b 100644 --- a/AOC2015/Day09.cs +++ b/AOC2015/Day09.cs @@ -5,11 +5,14 @@ namespace AOC2015; /// public sealed class Day09 : Day { - private record Distance(string Start, string End, int Length); private readonly List _distances = new(); - private readonly int _shortest = int.MaxValue, _longest; + private int _shortest = int.MaxValue, _longest; public Day09() : base(2015, 9, "All in a Single Night") + { + } + + public override void ProcessInput() { foreach (var split in Input.Select(line => line.Split(' '))) { @@ -34,4 +37,6 @@ public sealed class Day09 : Day public override object Part1() => _shortest; public override object Part2() => _longest; + + private record Distance(string Start, string End, int Length); } diff --git a/AOC2015/Day10.cs b/AOC2015/Day10.cs index 5fd54c8..f2b4456 100644 --- a/AOC2015/Day10.cs +++ b/AOC2015/Day10.cs @@ -8,6 +8,10 @@ public sealed class Day10 : Day private string _seed; public Day10() : base(2015, 10, "Elves Look, Elves Say") + { + } + + public override void ProcessInput() { _seed = Input.First(); } @@ -50,4 +54,4 @@ public sealed class Day10 : Day yield return count; yield return currentDigit - '0'; } -} +} \ No newline at end of file diff --git a/AOC2015/Day11.cs b/AOC2015/Day11.cs index 2afbd51..7784102 100644 --- a/AOC2015/Day11.cs +++ b/AOC2015/Day11.cs @@ -5,23 +5,27 @@ namespace AOC2015; /// public sealed class Day11 : Day { - private char[] _password; + private char[]? _password; public Day11() : base(2015, 11, "Corporate Policy") + { + } + + public override void ProcessInput() { _password = Input.First().ToCharArray(); } public override object Part1() { - while (!IsValid(ref _password)) Increment(ref _password); + while (!IsValid(ref _password!)) Increment(ref _password); return new string(_password); } public override object Part2() { - Increment(ref _password); + Increment(ref _password!); while (!IsValid(ref _password)) Increment(ref _password); return new string(_password); diff --git a/AOC2015/Day12.cs b/AOC2015/Day12.cs index a4061fa..d61e1a8 100644 --- a/AOC2015/Day12.cs +++ b/AOC2015/Day12.cs @@ -15,6 +15,10 @@ public sealed partial class Day12 : Day [GeneratedRegex(@"-?\d+")] private static partial Regex Digits(); + public override void ProcessInput() + { + } + public override object Part1() => Digits().Matches(Input.First()).Sum(n => int.Parse(n.Value)); diff --git a/AOC2015/Day13.cs b/AOC2015/Day13.cs index 0341397..a5f7df1 100644 --- a/AOC2015/Day13.cs +++ b/AOC2015/Day13.cs @@ -11,6 +11,10 @@ public sealed class Day13 : Day private readonly List _people = new(); public Day13() : base(2015, 13, "Knights of the Dinner Table") + { + } + + public override void ProcessInput() { foreach (var line in Input) AddToHappinessMap(line); diff --git a/AOC2015/Day14.cs b/AOC2015/Day14.cs index 83f8056..8cca5a8 100644 --- a/AOC2015/Day14.cs +++ b/AOC2015/Day14.cs @@ -5,19 +5,23 @@ namespace AOC2015; /// public sealed class Day14 : Day { - private readonly List _reindeer; + private List? _reindeer; public Day14() : base(2015, 14, "Reindeer Olympics") + { + } + + public override void ProcessInput() { _reindeer = Input.Select(i => new Reindeer(i)).ToList(); } public override object Part1() => - _reindeer.Select(r => r.Fly(2503)).Max(); + _reindeer!.Select(r => r.Fly(2503)).Max(); public override object Part2() => Enumerable.Range(1, 2503) - .SelectMany(time => _reindeer.GroupBy(r => r.Fly(time)).OrderByDescending(r => r.Key).First()) + .SelectMany(time => _reindeer!.GroupBy(r => r.Fly(time)).OrderByDescending(r => r.Key).First()) .GroupBy(r => r) .Max(g => g.Count()); diff --git a/AOC2015/Day15.cs b/AOC2015/Day15.cs index 0608c30..4b7fad8 100644 --- a/AOC2015/Day15.cs +++ b/AOC2015/Day15.cs @@ -5,25 +5,33 @@ namespace AOC2015; /// public sealed partial class Day15 : Day { - [GeneratedRegex(@"-?\d+")] - private static partial Regex Digits(); - - private record Ingredient(string Name, int Capacity, int Durability, int Flavor, int Texture, int Calories); - - private readonly List _ingredients; - private readonly int _best; - private readonly int _best500Cals; + private int _best; + private int _best500Cals; public Day15() : base(2015, 15, "Science for Hungry People") { - _ingredients = Input.Select(ParseIngredient).ToList(); + } - var quantities = new int[_ingredients.Count]; + [GeneratedRegex(@"-?\d+")] + private static partial Regex Digits(); + + private static Ingredient ParseIngredient(string line) + { + var s = line.Split(':'); + var nums = Digits().Matches(s[1]).Select(match => int.Parse(match.Value)).ToList(); + + return new(s[0], nums[0], nums[1], nums[2], nums[3], nums[4]); + } + + public override void ProcessInput() + { + var ingredients = Input.Select(ParseIngredient).ToList(); + var quantities = new int[ingredients.Count]; _best = 0; while (true) { - for (var i = 0; i < _ingredients.Count; i++) + for (var i = 0; i < ingredients.Count; i++) { quantities[i]++; if (quantities[i] > 100) @@ -31,17 +39,17 @@ public sealed partial class Day15 : Day else break; } - var quantityApplied = quantities.Take(_ingredients.Count - 1).Sum(); + var quantityApplied = quantities.Take(ingredients.Count - 1).Sum(); if (quantityApplied == 0) break; if (quantityApplied > 100) continue; quantities[^1] = 100 - quantityApplied; int cap = 0, dur = 0, fla = 0, tex = 0, cal = 0; - for (var j = 0; j < _ingredients.Count; j++) + for (var j = 0; j < ingredients.Count; j++) { var q = quantities[j]; - var i = _ingredients[j]; + var i = ingredients[j]; cap += q * i.Capacity; dur += q * i.Durability; @@ -57,15 +65,9 @@ public sealed partial class Day15 : Day } } - private static Ingredient ParseIngredient(string line) - { - var s = line.Split(':'); - var nums = Digits().Matches(s[1]).Select(match => int.Parse(match.Value)).ToList(); - - return new(s[0], nums[0], nums[1], nums[2], nums[3], nums[4]); - } - public override object Part1() => _best; public override object Part2() => _best500Cals; + + private record Ingredient(string Name, int Capacity, int Durability, int Flavor, int Texture, int Calories); } diff --git a/AOC2015/Day16.cs b/AOC2015/Day16.cs index 1008c15..2e54214 100644 --- a/AOC2015/Day16.cs +++ b/AOC2015/Day16.cs @@ -9,6 +9,10 @@ public sealed class Day16 : Day { } + public override void ProcessInput() + { + } + public override object Part1() => ""; public override object Part2() => ""; diff --git a/AOC2015/Day17.cs b/AOC2015/Day17.cs index c2a7fd7..54df631 100644 --- a/AOC2015/Day17.cs +++ b/AOC2015/Day17.cs @@ -8,6 +8,10 @@ public sealed class Day17 : Day public Day17() : base(2015, 17, "No Such Thing as Too Much") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2015/Day18.cs b/AOC2015/Day18.cs index 693e454..e8af781 100644 --- a/AOC2015/Day18.cs +++ b/AOC2015/Day18.cs @@ -8,6 +8,10 @@ public sealed class Day18 : Day public Day18() : base(2015, 18, "Like a GIF For Your Yard") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2015/Day19.cs b/AOC2015/Day19.cs index 54494ed..d600c3f 100644 --- a/AOC2015/Day19.cs +++ b/AOC2015/Day19.cs @@ -8,6 +8,10 @@ public sealed class Day19 : Day public Day19() : base(2015, 19, "Medicine for Rudolph") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2015/Day20.cs b/AOC2015/Day20.cs index cfd4d75..29ba85b 100644 --- a/AOC2015/Day20.cs +++ b/AOC2015/Day20.cs @@ -8,6 +8,10 @@ public sealed class Day20 : Day public Day20() : base(2015, 20, "Infinite Elves and Infinite Houses") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2015/Day21.cs b/AOC2015/Day21.cs index fbda0b4..17f44c1 100644 --- a/AOC2015/Day21.cs +++ b/AOC2015/Day21.cs @@ -8,6 +8,10 @@ public sealed class Day21 : Day public Day21() : base(2015, 21, "RPG Simulator 20XX") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2015/Day22.cs b/AOC2015/Day22.cs index 6df2327..0edc206 100644 --- a/AOC2015/Day22.cs +++ b/AOC2015/Day22.cs @@ -8,6 +8,10 @@ public sealed class Day22 : Day public Day22() : base(2015, 22, "Wizard Simulator 20XX") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2015/Day23.cs b/AOC2015/Day23.cs index 4d5e343..f30d1c9 100644 --- a/AOC2015/Day23.cs +++ b/AOC2015/Day23.cs @@ -8,6 +8,10 @@ public sealed class Day23 : Day public Day23() : base(2015, 23, "Opening the Turing Lock") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2015/Day24.cs b/AOC2015/Day24.cs index 416202c..0c6c8ad 100644 --- a/AOC2015/Day24.cs +++ b/AOC2015/Day24.cs @@ -8,6 +8,10 @@ public sealed class Day24 : Day public Day24() : base(2015, 24, "It Hangs in the Balance") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2015/Day25.cs b/AOC2015/Day25.cs index 9610669..6a6f778 100644 --- a/AOC2015/Day25.cs +++ b/AOC2015/Day25.cs @@ -8,6 +8,10 @@ public sealed class Day25 : Day public Day25() : base(2015, 25, "Let It Snow") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day01.cs b/AOC2016/Day01.cs index 13dddeb..5207ba8 100644 --- a/AOC2016/Day01.cs +++ b/AOC2016/Day01.cs @@ -8,6 +8,10 @@ public sealed class Day01 : Day public Day01() : base(2016, 1, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day02.cs b/AOC2016/Day02.cs index f301c74..be784c8 100644 --- a/AOC2016/Day02.cs +++ b/AOC2016/Day02.cs @@ -8,6 +8,10 @@ public sealed class Day02 : Day public Day02() : base(2016, 2, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day03.cs b/AOC2016/Day03.cs index 1dcb284..fd6a537 100644 --- a/AOC2016/Day03.cs +++ b/AOC2016/Day03.cs @@ -8,6 +8,10 @@ public sealed class Day03 : Day public Day03() : base(2016, 3, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day04.cs b/AOC2016/Day04.cs index 040e431..2585cc2 100644 --- a/AOC2016/Day04.cs +++ b/AOC2016/Day04.cs @@ -8,6 +8,10 @@ public sealed class Day04 : Day public Day04() : base(2016, 4, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day05.cs b/AOC2016/Day05.cs index 4a811eb..216776a 100644 --- a/AOC2016/Day05.cs +++ b/AOC2016/Day05.cs @@ -8,6 +8,10 @@ public sealed class Day05 : Day public Day05() : base(2016, 5, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day06.cs b/AOC2016/Day06.cs index ecd7d3f..24c08b9 100644 --- a/AOC2016/Day06.cs +++ b/AOC2016/Day06.cs @@ -8,6 +8,10 @@ public sealed class Day06 : Day public Day06() : base(2016, 6, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day07.cs b/AOC2016/Day07.cs index 67886e3..115d8e8 100644 --- a/AOC2016/Day07.cs +++ b/AOC2016/Day07.cs @@ -8,6 +8,10 @@ public sealed class Day07 : Day public Day07() : base(2016, 7, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day08.cs b/AOC2016/Day08.cs index acf66ee..3e83364 100644 --- a/AOC2016/Day08.cs +++ b/AOC2016/Day08.cs @@ -8,6 +8,10 @@ public sealed class Day08 : Day public Day08() : base(2016, 8, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day09.cs b/AOC2016/Day09.cs index 009493d..f4f471e 100644 --- a/AOC2016/Day09.cs +++ b/AOC2016/Day09.cs @@ -8,6 +8,10 @@ public sealed class Day09 : Day public Day09() : base(2016, 9, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day10.cs b/AOC2016/Day10.cs index cb7c29c..3cb11e6 100644 --- a/AOC2016/Day10.cs +++ b/AOC2016/Day10.cs @@ -8,6 +8,10 @@ public sealed class Day10 : Day public Day10() : base(2016, 10, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day11.cs b/AOC2016/Day11.cs index c07f54b..08aa3a8 100644 --- a/AOC2016/Day11.cs +++ b/AOC2016/Day11.cs @@ -8,6 +8,10 @@ public sealed class Day11 : Day public Day11() : base(2016, 11, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day12.cs b/AOC2016/Day12.cs index c052ef8..d32f626 100644 --- a/AOC2016/Day12.cs +++ b/AOC2016/Day12.cs @@ -8,6 +8,10 @@ public sealed class Day12 : Day public Day12() : base(2016, 12, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day13.cs b/AOC2016/Day13.cs index 92fc338..b47ab83 100644 --- a/AOC2016/Day13.cs +++ b/AOC2016/Day13.cs @@ -8,6 +8,10 @@ public sealed class Day13 : Day public Day13() : base(2016, 13, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day14.cs b/AOC2016/Day14.cs index dfe5e2b..1b2f370 100644 --- a/AOC2016/Day14.cs +++ b/AOC2016/Day14.cs @@ -8,6 +8,10 @@ public sealed class Day14 : Day public Day14() : base(2016, 14, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day15.cs b/AOC2016/Day15.cs index a4de96c..848eb89 100644 --- a/AOC2016/Day15.cs +++ b/AOC2016/Day15.cs @@ -8,6 +8,10 @@ public sealed class Day15 : Day public Day15() : base(2016, 15, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day16.cs b/AOC2016/Day16.cs index b1607ff..327a08e 100644 --- a/AOC2016/Day16.cs +++ b/AOC2016/Day16.cs @@ -8,6 +8,10 @@ public sealed class Day16 : Day public Day16() : base(2016, 16, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day17.cs b/AOC2016/Day17.cs index b9728a2..3dbfdde 100644 --- a/AOC2016/Day17.cs +++ b/AOC2016/Day17.cs @@ -8,6 +8,10 @@ public sealed class Day17 : Day public Day17() : base(2016, 17, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day18.cs b/AOC2016/Day18.cs index 2b4d3c0..920d7aa 100644 --- a/AOC2016/Day18.cs +++ b/AOC2016/Day18.cs @@ -8,6 +8,10 @@ public sealed class Day18 : Day public Day18() : base(2016, 18, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day19.cs b/AOC2016/Day19.cs index 607e32e..04038db 100644 --- a/AOC2016/Day19.cs +++ b/AOC2016/Day19.cs @@ -8,6 +8,10 @@ public sealed class Day19 : Day public Day19() : base(2016, 19, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day20.cs b/AOC2016/Day20.cs index e993269..4799aec 100644 --- a/AOC2016/Day20.cs +++ b/AOC2016/Day20.cs @@ -8,6 +8,10 @@ public sealed class Day20 : Day public Day20() : base(2016, 20, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day21.cs b/AOC2016/Day21.cs index 4b9268d..cf0427b 100644 --- a/AOC2016/Day21.cs +++ b/AOC2016/Day21.cs @@ -8,6 +8,10 @@ public sealed class Day21 : Day public Day21() : base(2016, 21, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day22.cs b/AOC2016/Day22.cs index 15b0961..5adc5e8 100644 --- a/AOC2016/Day22.cs +++ b/AOC2016/Day22.cs @@ -8,7 +8,11 @@ public sealed class Day22 : Day public Day22() : base(2016, 22, "Puzzle Name") { } - + + public override void ProcessInput() + { + } + public override object Part1() => ""; public override object Part2() => ""; diff --git a/AOC2016/Day23.cs b/AOC2016/Day23.cs index 54b1a33..d9bbae0 100644 --- a/AOC2016/Day23.cs +++ b/AOC2016/Day23.cs @@ -8,6 +8,10 @@ public sealed class Day23 : Day public Day23() : base(2016, 23, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day24.cs b/AOC2016/Day24.cs index 29fcf5d..533d8f9 100644 --- a/AOC2016/Day24.cs +++ b/AOC2016/Day24.cs @@ -8,6 +8,10 @@ public sealed class Day24 : Day public Day24() : base(2016, 24, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2016/Day25.cs b/AOC2016/Day25.cs index 10782ed..d1a25e4 100644 --- a/AOC2016/Day25.cs +++ b/AOC2016/Day25.cs @@ -8,6 +8,10 @@ public sealed class Day25 : Day public Day25() : base(2016, 25, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day01.cs b/AOC2017/Day01.cs index 4ce7090..aad889e 100644 --- a/AOC2017/Day01.cs +++ b/AOC2017/Day01.cs @@ -8,6 +8,10 @@ public sealed class Day01 : Day public Day01() : base(2017, 1, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day02.cs b/AOC2017/Day02.cs index c288e48..0b1ad79 100644 --- a/AOC2017/Day02.cs +++ b/AOC2017/Day02.cs @@ -8,6 +8,10 @@ public sealed class Day02 : Day public Day02() : base(2017, 2, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day03.cs b/AOC2017/Day03.cs index fbee83d..b0c9b50 100644 --- a/AOC2017/Day03.cs +++ b/AOC2017/Day03.cs @@ -8,6 +8,10 @@ public sealed class Day03 : Day public Day03() : base(2017, 3, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day04.cs b/AOC2017/Day04.cs index 4028441..d9b32b0 100644 --- a/AOC2017/Day04.cs +++ b/AOC2017/Day04.cs @@ -8,6 +8,10 @@ public sealed class Day04 : Day public Day04() : base(2017, 4, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day05.cs b/AOC2017/Day05.cs index f6165f8..fc5133a 100644 --- a/AOC2017/Day05.cs +++ b/AOC2017/Day05.cs @@ -8,6 +8,10 @@ public sealed class Day05 : Day public Day05() : base(2017, 5, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day06.cs b/AOC2017/Day06.cs index a89a6c8..9797143 100644 --- a/AOC2017/Day06.cs +++ b/AOC2017/Day06.cs @@ -8,6 +8,10 @@ public sealed class Day06 : Day public Day06() : base(2017, 6, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day07.cs b/AOC2017/Day07.cs index eb293a7..651d2ef 100644 --- a/AOC2017/Day07.cs +++ b/AOC2017/Day07.cs @@ -8,6 +8,10 @@ public sealed class Day07 : Day public Day07() : base(2017, 7, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day08.cs b/AOC2017/Day08.cs index a3058ea..82f123b 100644 --- a/AOC2017/Day08.cs +++ b/AOC2017/Day08.cs @@ -8,6 +8,10 @@ public sealed class Day08 : Day public Day08() : base(2017, 8, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day09.cs b/AOC2017/Day09.cs index 5a0faf5..3bfcef0 100644 --- a/AOC2017/Day09.cs +++ b/AOC2017/Day09.cs @@ -8,6 +8,10 @@ public sealed class Day09 : Day public Day09() : base(2017, 9, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day10.cs b/AOC2017/Day10.cs index 743a3c0..067f1de 100644 --- a/AOC2017/Day10.cs +++ b/AOC2017/Day10.cs @@ -8,6 +8,10 @@ public sealed class Day10 : Day public Day10() : base(2017, 10, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day11.cs b/AOC2017/Day11.cs index af90f67..972fcee 100644 --- a/AOC2017/Day11.cs +++ b/AOC2017/Day11.cs @@ -8,6 +8,10 @@ public sealed class Day11 : Day public Day11() : base(2017, 11, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day12.cs b/AOC2017/Day12.cs index 2b11e3a..9a2b498 100644 --- a/AOC2017/Day12.cs +++ b/AOC2017/Day12.cs @@ -8,6 +8,10 @@ public sealed class Day12 : Day public Day12() : base(2017, 12, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day13.cs b/AOC2017/Day13.cs index 7fbb9e5..84a6cc1 100644 --- a/AOC2017/Day13.cs +++ b/AOC2017/Day13.cs @@ -8,6 +8,10 @@ public sealed class Day13 : Day public Day13() : base(2017, 13, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day14.cs b/AOC2017/Day14.cs index 97487d7..3c75a61 100644 --- a/AOC2017/Day14.cs +++ b/AOC2017/Day14.cs @@ -8,6 +8,10 @@ public sealed class Day14 : Day public Day14() : base(2017, 14, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day15.cs b/AOC2017/Day15.cs index c000bf4..b646e1d 100644 --- a/AOC2017/Day15.cs +++ b/AOC2017/Day15.cs @@ -8,6 +8,10 @@ public sealed class Day15 : Day public Day15() : base(2017, 15, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day16.cs b/AOC2017/Day16.cs index 35cc4fc..4f00665 100644 --- a/AOC2017/Day16.cs +++ b/AOC2017/Day16.cs @@ -8,6 +8,10 @@ public sealed class Day16 : Day public Day16() : base(2017, 16, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day17.cs b/AOC2017/Day17.cs index 6c1955a..bd4a812 100644 --- a/AOC2017/Day17.cs +++ b/AOC2017/Day17.cs @@ -8,6 +8,10 @@ public sealed class Day17 : Day public Day17() : base(2017, 17, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day18.cs b/AOC2017/Day18.cs index db3b2d9..54eaa27 100644 --- a/AOC2017/Day18.cs +++ b/AOC2017/Day18.cs @@ -8,6 +8,10 @@ public sealed class Day18 : Day public Day18() : base(2017, 18, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day19.cs b/AOC2017/Day19.cs index 3ec0fbe..7a685b8 100644 --- a/AOC2017/Day19.cs +++ b/AOC2017/Day19.cs @@ -8,6 +8,10 @@ public sealed class Day19 : Day public Day19() : base(2017, 19, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day20.cs b/AOC2017/Day20.cs index fca7b19..1c66fe9 100644 --- a/AOC2017/Day20.cs +++ b/AOC2017/Day20.cs @@ -8,6 +8,10 @@ public sealed class Day20 : Day public Day20() : base(2017, 20, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day21.cs b/AOC2017/Day21.cs index 5701609..e8b35ad 100644 --- a/AOC2017/Day21.cs +++ b/AOC2017/Day21.cs @@ -8,6 +8,10 @@ public sealed class Day21 : Day public Day21() : base(2017, 21, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day22.cs b/AOC2017/Day22.cs index a168da1..997c0a6 100644 --- a/AOC2017/Day22.cs +++ b/AOC2017/Day22.cs @@ -8,6 +8,10 @@ public sealed class Day22 : Day public Day22() : base(2017, 22, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day23.cs b/AOC2017/Day23.cs index e9581d8..4032c1a 100644 --- a/AOC2017/Day23.cs +++ b/AOC2017/Day23.cs @@ -8,6 +8,10 @@ public sealed class Day23 : Day public Day23() : base(2017, 23, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day24.cs b/AOC2017/Day24.cs index 29306a5..feb23fa 100644 --- a/AOC2017/Day24.cs +++ b/AOC2017/Day24.cs @@ -8,6 +8,10 @@ public sealed class Day24 : Day public Day24() : base(2017, 24, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2017/Day25.cs b/AOC2017/Day25.cs index 749432f..c4cf67e 100644 --- a/AOC2017/Day25.cs +++ b/AOC2017/Day25.cs @@ -8,6 +8,10 @@ public sealed class Day25 : Day public Day25() : base(2017, 25, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day01.cs b/AOC2018/Day01.cs index 4343c3b..d33edad 100644 --- a/AOC2018/Day01.cs +++ b/AOC2018/Day01.cs @@ -8,6 +8,10 @@ public sealed class Day01 : Day public Day01() : base(2018, 1, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day02.cs b/AOC2018/Day02.cs index 1070fdf..07b33f0 100644 --- a/AOC2018/Day02.cs +++ b/AOC2018/Day02.cs @@ -8,6 +8,10 @@ public sealed class Day02 : Day public Day02() : base(2018, 2, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day03.cs b/AOC2018/Day03.cs index 8d201e6..6bd904f 100644 --- a/AOC2018/Day03.cs +++ b/AOC2018/Day03.cs @@ -8,6 +8,10 @@ public sealed class Day03 : Day public Day03() : base(2018, 3, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day04.cs b/AOC2018/Day04.cs index 1d9bef7..f5bfc6b 100644 --- a/AOC2018/Day04.cs +++ b/AOC2018/Day04.cs @@ -8,6 +8,10 @@ public sealed class Day04 : Day public Day04() : base(2018, 4, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day05.cs b/AOC2018/Day05.cs index 0509574..a2ede6e 100644 --- a/AOC2018/Day05.cs +++ b/AOC2018/Day05.cs @@ -8,6 +8,10 @@ public sealed class Day05 : Day public Day05() : base(2018, 5, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day06.cs b/AOC2018/Day06.cs index 62f3022..b67ff07 100644 --- a/AOC2018/Day06.cs +++ b/AOC2018/Day06.cs @@ -8,6 +8,10 @@ public sealed class Day06 : Day public Day06() : base(2018, 6, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day07.cs b/AOC2018/Day07.cs index 9036bb1..2efd4b6 100644 --- a/AOC2018/Day07.cs +++ b/AOC2018/Day07.cs @@ -8,6 +8,10 @@ public sealed class Day07 : Day public Day07() : base(2018, 7, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day08.cs b/AOC2018/Day08.cs index 3db2eaf..b5cb494 100644 --- a/AOC2018/Day08.cs +++ b/AOC2018/Day08.cs @@ -8,6 +8,10 @@ public sealed class Day08 : Day public Day08() : base(2018, 8, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day09.cs b/AOC2018/Day09.cs index 9b492cb..fffc8b4 100644 --- a/AOC2018/Day09.cs +++ b/AOC2018/Day09.cs @@ -8,6 +8,10 @@ public sealed class Day09 : Day public Day09() : base(2018, 9, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day10.cs b/AOC2018/Day10.cs index 2563fd6..2fdac05 100644 --- a/AOC2018/Day10.cs +++ b/AOC2018/Day10.cs @@ -8,6 +8,10 @@ public sealed class Day10 : Day public Day10() : base(2018, 10, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day11.cs b/AOC2018/Day11.cs index 18472b8..d2869c5 100644 --- a/AOC2018/Day11.cs +++ b/AOC2018/Day11.cs @@ -8,6 +8,10 @@ public sealed class Day11 : Day public Day11() : base(2018, 11, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day12.cs b/AOC2018/Day12.cs index ea0e833..1556693 100644 --- a/AOC2018/Day12.cs +++ b/AOC2018/Day12.cs @@ -8,6 +8,10 @@ public sealed class Day12 : Day public Day12() : base(2018, 12, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day13.cs b/AOC2018/Day13.cs index 7fac808..69c00a2 100644 --- a/AOC2018/Day13.cs +++ b/AOC2018/Day13.cs @@ -8,6 +8,10 @@ public sealed class Day13 : Day public Day13() : base(2018, 13, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day14.cs b/AOC2018/Day14.cs index d3fffcf..dcf173d 100644 --- a/AOC2018/Day14.cs +++ b/AOC2018/Day14.cs @@ -8,6 +8,10 @@ public sealed class Day14 : Day public Day14() : base(2018, 14, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day15.cs b/AOC2018/Day15.cs index 82a60ce..fc0f59a 100644 --- a/AOC2018/Day15.cs +++ b/AOC2018/Day15.cs @@ -8,6 +8,10 @@ public sealed class Day15 : Day public Day15() : base(2018, 15, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day16.cs b/AOC2018/Day16.cs index a491ef6..705cfa9 100644 --- a/AOC2018/Day16.cs +++ b/AOC2018/Day16.cs @@ -8,6 +8,10 @@ public sealed class Day16 : Day public Day16() : base(2018, 16, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day17.cs b/AOC2018/Day17.cs index 159294d..9f9e35a 100644 --- a/AOC2018/Day17.cs +++ b/AOC2018/Day17.cs @@ -8,6 +8,10 @@ public sealed class Day17 : Day public Day17() : base(2018, 17, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day18.cs b/AOC2018/Day18.cs index 6687249..8296881 100644 --- a/AOC2018/Day18.cs +++ b/AOC2018/Day18.cs @@ -8,6 +8,10 @@ public sealed class Day18 : Day public Day18() : base(2018, 18, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day19.cs b/AOC2018/Day19.cs index fc7312e..89659a3 100644 --- a/AOC2018/Day19.cs +++ b/AOC2018/Day19.cs @@ -8,6 +8,10 @@ public sealed class Day19 : Day public Day19() : base(2018, 19, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day20.cs b/AOC2018/Day20.cs index e586737..d531376 100644 --- a/AOC2018/Day20.cs +++ b/AOC2018/Day20.cs @@ -8,6 +8,10 @@ public sealed class Day20 : Day public Day20() : base(2018, 20, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day21.cs b/AOC2018/Day21.cs index 4b7b352..3269319 100644 --- a/AOC2018/Day21.cs +++ b/AOC2018/Day21.cs @@ -8,6 +8,10 @@ public sealed class Day21 : Day public Day21() : base(2018, 21, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day22.cs b/AOC2018/Day22.cs index c2d3dc7..6c13a45 100644 --- a/AOC2018/Day22.cs +++ b/AOC2018/Day22.cs @@ -8,6 +8,10 @@ public sealed class Day22 : Day public Day22() : base(2018, 22, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day23.cs b/AOC2018/Day23.cs index 5ef7793..c0b49bd 100644 --- a/AOC2018/Day23.cs +++ b/AOC2018/Day23.cs @@ -8,6 +8,10 @@ public sealed class Day23 : Day public Day23() : base(2018, 23, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day24.cs b/AOC2018/Day24.cs index 76519bc..18cd3a6 100644 --- a/AOC2018/Day24.cs +++ b/AOC2018/Day24.cs @@ -8,6 +8,10 @@ public sealed class Day24 : Day public Day24() : base(2018, 24, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2018/Day25.cs b/AOC2018/Day25.cs index 3a3af58..2912111 100644 --- a/AOC2018/Day25.cs +++ b/AOC2018/Day25.cs @@ -8,6 +8,10 @@ public sealed class Day25 : Day public Day25() : base(2018, 25, "Puzzle Name") { } + + public override void ProcessInput() + { + } public override object Part1() => ""; diff --git a/AOC2019/Day01.cs b/AOC2019/Day01.cs index 7362e57..9b0520c 100644 --- a/AOC2019/Day01.cs +++ b/AOC2019/Day01.cs @@ -2,9 +2,13 @@ namespace AOC2019; public sealed class Day01 : Day { - private readonly IEnumerable _masses; + private IEnumerable? _masses; public Day01() : base(2019, 1, "The Tyranny of the Rocket Equation") + { + } + + public override void ProcessInput() { _masses = Input.Select(int.Parse); } @@ -24,7 +28,7 @@ public sealed class Day01 : Day return total; } - public override object Part1() => _masses.Sum(FuelCost); + public override object Part1() => _masses!.Sum(FuelCost); - public override object Part2() => _masses.Sum(FullCost); + public override object Part2() => _masses!.Sum(FullCost); } diff --git a/AOC2019/Day02.cs b/AOC2019/Day02.cs index aeb45d1..8fb9b57 100644 --- a/AOC2019/Day02.cs +++ b/AOC2019/Day02.cs @@ -2,16 +2,20 @@ namespace AOC2019; public sealed class Day02 : Day { - private readonly IEnumerable _input; + private IEnumerable? _input; public Day02() : base(2019, 2, "1202 Program Alarm") + { + } + + public override void ProcessInput() { _input = Input.First().Split(',').Select(int.Parse); } private int RunIntCode(int noun, int verb) { - var v = _input.ToList(); + var v = _input!.ToList(); v[1] = noun; v[2] = verb; diff --git a/AOC2019/Day03.cs b/AOC2019/Day03.cs index 527fd4f..4cc3bf3 100644 --- a/AOC2019/Day03.cs +++ b/AOC2019/Day03.cs @@ -2,21 +2,25 @@ namespace AOC2019; public sealed class Day03 : Day { - private readonly IEnumerable<(int, int)> _intersections; - private readonly List> _wires; + private IEnumerable<(int, int)>? _intersections; + private List>? _wires; public Day03() : base(2019, 3, "Crossed Wires") + { + } + + public override void ProcessInput() { _wires = Input.Select(ParseWire).ToList(); _intersections = _wires[0].Keys.Intersect(_wires[1].Keys); } - public override object Part1() => - _intersections.Min(x => Math.Abs(x.Item1) + Math.Abs(x.Item2)); + public override object Part1() => + _intersections!.Min(x => Math.Abs(x.Item1) + Math.Abs(x.Item2)); public override object Part2() => // add 2 to count (0, 0) on both lines - _intersections.Min(x => _wires[0][x] + _wires[1][x]) + 2; + _intersections!.Min(x => _wires![0][x] + _wires[1][x]) + 2; private static Dictionary<(int, int), int> ParseWire(string line) { @@ -45,4 +49,4 @@ public sealed class Day03 : Day return r; } -} +} \ No newline at end of file diff --git a/AOC2019/Day04.cs b/AOC2019/Day04.cs index 2f595b4..193f12f 100644 --- a/AOC2019/Day04.cs +++ b/AOC2019/Day04.cs @@ -2,9 +2,13 @@ namespace AOC2019; public sealed class Day04 : Day { - private readonly int _start, _end; + private int _start, _end; public Day04() : base(2019, 4, "Secure Container") + { + } + + public override void ProcessInput() { var range = Input.First().Split('-').Select(int.Parse).ToList(); _start = range[0]; @@ -34,6 +38,6 @@ public sealed class Day04 : Day public override object Part1() => Enumerable.Range(_start, _end).Count(IsValid); - public override object Part2() => + public override object Part2() => Enumerable.Range(_start, _end).Count(HasOnePair); -} +} \ No newline at end of file diff --git a/AOC2019/Day05.cs b/AOC2019/Day05.cs index 9c3f4d4..9e94f45 100644 --- a/AOC2019/Day05.cs +++ b/AOC2019/Day05.cs @@ -2,10 +2,14 @@ namespace AOC2019; public sealed class Day05 : Day { - private readonly IEnumerable _tape; + private IEnumerable? _tape; private int _output; public Day05() : base(2019, 5, "Sunny with a Chance of Asteroids") + { + } + + public override void ProcessInput() { _tape = Input.First().Split(',').Select(int.Parse); } @@ -61,13 +65,13 @@ public sealed class Day05 : Day public override object Part1() { - RunIntCode(_tape.ToList(), 1); + RunIntCode(_tape!.ToList(), 1); return _output; } public override object Part2() { - RunIntCode(_tape.ToList(), 5); + RunIntCode(_tape!.ToList(), 5); return _output; } -} +} \ No newline at end of file diff --git a/AOC2019/Day06.cs b/AOC2019/Day06.cs index ebf0e27..5fcd28e 100644 --- a/AOC2019/Day06.cs +++ b/AOC2019/Day06.cs @@ -2,9 +2,13 @@ namespace AOC2019; public sealed class Day06 : Day { - private readonly Dictionary _input; + private Dictionary? _input; public Day06() : base(2019, 6, "Universal Orbit Map") + { + } + + public override void ProcessInput() { _input = Input.ToDictionary(i => i.Split(')')[1], i => i.Split(')')[0]); } @@ -12,14 +16,14 @@ public sealed class Day06 : Day private List GetParents(string obj) { var res = new List(); - for (var curr = obj; curr != "COM"; curr = _input[curr]) + for (var curr = obj; curr != "COM"; curr = _input![curr]) res.Add(curr); res.Add("COM"); return res; } public override object Part1() => - _input.Keys.Sum(o => GetParents(o).Count - 1); + _input!.Keys.Sum(o => GetParents(o).Count - 1); public override object Part2() { @@ -32,4 +36,4 @@ public sealed class Day06 : Day return you.Count + san.Count - common * 2; } -} +} \ No newline at end of file diff --git a/AOC2019/Day07.cs b/AOC2019/Day07.cs index 14e4b0b..c0fc484 100644 --- a/AOC2019/Day07.cs +++ b/AOC2019/Day07.cs @@ -5,6 +5,10 @@ public sealed class Day07 : Day private readonly IntCodeVM[] _amplifiers = new IntCodeVM[5]; public Day07() : base(2019, 7, "Amplification Circuit") + { + } + + public override void ProcessInput() { for (var i = 0; i < 5; i++) _amplifiers[i] = new(Input.First()); } diff --git a/AOC2019/Day08.cs b/AOC2019/Day08.cs index 056a616..6842d16 100644 --- a/AOC2019/Day08.cs +++ b/AOC2019/Day08.cs @@ -2,23 +2,27 @@ namespace AOC2019; public sealed class Day08 : Day { - private readonly List> _photo; + private List>? _photo; public Day08() : base(2019, 8, "Space Image Format") + { + } + + public override void ProcessInput() { _photo = Input.First().Chunk(25 * 6).Select(s => s.ToList()).ToList(); } public override object Part1() { - var l = _photo.OrderBy(layer => layer.Count(pixel => pixel == '0')).First(); + var l = _photo!.OrderBy(layer => layer.Count(pixel => pixel == '0')).First(); return l.Count(p => p == '1') * l.Count(p => p == '2'); } public override object Part2() { return Enumerable.Range(0, 25 * 6) - .Select(p => Enumerable.Range(0, _photo.Count) + .Select(p => Enumerable.Range(0, _photo!.Count) .Select(l => _photo[l][p]) .Aggregate('2', (acc, next) => acc != '2' ? acc : next == '0' ? ' ' : next @@ -30,4 +34,4 @@ public sealed class Day08 : Day .ToDelimitedString("\n") .Replace('1', 'x'); } -} +} \ No newline at end of file diff --git a/AOC2019/Day09.cs b/AOC2019/Day09.cs index 8c81bf0..b669acf 100644 --- a/AOC2019/Day09.cs +++ b/AOC2019/Day09.cs @@ -2,24 +2,28 @@ namespace AOC2019; public sealed class Day09 : Day { - private readonly IntCodeVM _vm; + private IntCodeVM? _vm; public Day09() : base(2019, 9, "Sensor Boost") + { + } + + public override void ProcessInput() { _vm = new(Input.First()); } public override object Part1() { - _vm.Reset(); + _vm!.Reset(); _vm.Run(1); return _vm.Output.ToDelimitedString(","); } public override object Part2() { - _vm.Reset(); + _vm!.Reset(); _vm.Run(2); return _vm.Output.ToDelimitedString(","); } -} +} \ No newline at end of file diff --git a/AOC2019/Day10.cs b/AOC2019/Day10.cs index d078d57..cfbbbc6 100644 --- a/AOC2019/Day10.cs +++ b/AOC2019/Day10.cs @@ -2,11 +2,15 @@ namespace AOC2019; public sealed class Day10 : Day { - private readonly HashSet<(int x, int y)> _asteroids; + private HashSet<(int x, int y)>? _asteroids; private (int x, int y) _best = (x: -1, y: -1); private int _bestCanSee; public Day10() : base(2019, 10, "Monitoring Station") + { + } + + public override void ProcessInput() { _asteroids = Input .Select((r, y) => r.Select((c, x) => (x, y, isAsteroid: c == '#')).ToArray()) @@ -18,7 +22,7 @@ public sealed class Day10 : Day public override object Part1() { - foreach (var asteroid in _asteroids) + foreach (var asteroid in _asteroids!) { var canSee = _asteroids .Except(new[] { asteroid }) @@ -44,7 +48,7 @@ public sealed class Day10 : Day if (q.Count > 0) yield return q.Dequeue(); } - return _asteroids + return _asteroids! .Where(a => a != _best) .Select(a => { @@ -63,4 +67,4 @@ public sealed class Day10 : Day .Select(a => a.x * 100 + a.y) .Single(); } -} +} \ No newline at end of file diff --git a/AOC2019/Day11.cs b/AOC2019/Day11.cs index 8aafd22..c1910aa 100644 --- a/AOC2019/Day11.cs +++ b/AOC2019/Day11.cs @@ -2,11 +2,15 @@ namespace AOC2019; public sealed class Day11 : Day { - private readonly IntCodeVM _vm; + private IntCodeVM? _vm; private Direction _heading; private long _x, _y; public Day11() : base(2019, 11, "Space Police") + { + } + + public override void ProcessInput() { _vm = new(Input.First()); } @@ -49,7 +53,7 @@ public sealed class Day11 : Day private Dictionary<(long x, long y), long> PaintShip(int initialVal) { var map = new Dictionary<(long, long), long>(); - _vm.Reset(); + _vm!.Reset(); _heading = Direction.Up; _x = 0; _y = 0; diff --git a/AOC2019/Day12.cs b/AOC2019/Day12.cs index 64998b4..457f870 100644 --- a/AOC2019/Day12.cs +++ b/AOC2019/Day12.cs @@ -2,10 +2,14 @@ namespace AOC2019; public sealed class Day12 : Day { - private readonly List _moons; + private List? _moons; private int _step; public Day12() : base(2019, 12, "The N-Body Problem") + { + } + + public override void ProcessInput() { _moons = Input .Select(moon => @@ -24,7 +28,7 @@ public sealed class Day12 : Day private void Step() { - foreach (var moon in _moons) + foreach (var moon in _moons!) moon.Gravitate(); foreach (var moon in _moons) @@ -38,7 +42,7 @@ public sealed class Day12 : Day while (_step < 1000) Step(); - return _moons.Sum(p => p.TotalEnergy); + return _moons!.Sum(p => p.TotalEnergy); } public override object Part2() @@ -48,9 +52,9 @@ public sealed class Day12 : Day while (cycleX == 0 || cycleY == 0 || cycleZ == 0) { Step(); - if (cycleX == 0 && _moons.All(m => m.Dx == 0)) cycleX = _step * 2; - if (cycleY == 0 && _moons.All(m => m.Dy == 0)) cycleY = _step * 2; - if (cycleZ == 0 && _moons.All(m => m.Dz == 0)) cycleZ = _step * 2; + if (cycleX == 0 && _moons!.All(m => m.Dx == 0)) cycleX = _step * 2; + if (cycleY == 0 && _moons!.All(m => m.Dy == 0)) cycleY = _step * 2; + if (cycleZ == 0 && _moons!.All(m => m.Dz == 0)) cycleZ = _step * 2; } return Util.Lcm(cycleX, Util.Lcm(cycleY, cycleZ)); @@ -58,9 +62,9 @@ public sealed class Day12 : Day public class Position { - public int Dx, Dy, Dz; private List _siblings; private int _x, _y, _z; + public int Dx, Dy, Dz; public Position(IList moon) { @@ -105,4 +109,4 @@ public sealed class Day12 : Day _z += Dz; } } -} +} \ No newline at end of file diff --git a/AOC2019/Day13.cs b/AOC2019/Day13.cs index 0fa232e..759cc7d 100644 --- a/AOC2019/Day13.cs +++ b/AOC2019/Day13.cs @@ -3,9 +3,13 @@ namespace AOC2019; public sealed class Day13 : Day { private readonly Dictionary<(int x, int y), int> _board = new(); - private readonly IntCodeVM _vm; + private IntCodeVM? _vm; public Day13() : base(2019, 13, "Care Package") + { + } + + public override void ProcessInput() { _vm = new(Input.First()); } @@ -44,14 +48,14 @@ public sealed class Day13 : Day public override object Part1() { - _vm.Reset(); + _vm!.Reset(); _vm.Run(); return _vm.Output.Where((v, i) => (i + 1) % 3 == 0 && v == 2).Count(); } public override object Part2() { - _vm.Reset(); + _vm!.Reset(); _vm.Memory[0] = 2; var printBoard = false; var gameTicks = 0; diff --git a/AOC2019/Day14.cs b/AOC2019/Day14.cs index da88bb0..8f2dc48 100644 --- a/AOC2019/Day14.cs +++ b/AOC2019/Day14.cs @@ -2,17 +2,18 @@ namespace AOC2019; public sealed class Day14 : Day { - private readonly Dictionary _reactions; - - private Dictionary _available; + private Dictionary? _reactions; + private Dictionary _available = new(); public Day14() : base(2019, 14, "Space Stoichiometry") + { + } + + public override void ProcessInput() { _reactions = Input .Select(Reaction.Parse) .ToDictionary(r => r.Product.Name); - - _available = new(); } private bool Consume(string chem, long quantity) @@ -35,7 +36,7 @@ public sealed class Day14 : Day if (chem == "ORE") return false; - var reaction = _reactions[chem]; + var reaction = _reactions![chem]; var reactionCount = (long)Math.Ceiling((double)quantity / reaction.Product.Quantity); if (reaction.Reactants.Any(reactant => !Consume(reactant.Name, reactionCount * reactant.Quantity))) diff --git a/AOC2019/Day15.cs b/AOC2019/Day15.cs index 4bb1b44..b626948 100644 --- a/AOC2019/Day15.cs +++ b/AOC2019/Day15.cs @@ -3,16 +3,20 @@ namespace AOC2019; public sealed class Day15 : Day { private readonly bool _verbose = false; - private readonly IntCodeVM _vm; + private IntCodeVM? _vm; public Day15() : base(2019, 15, "Oxygen System") + { + } + + public override void ProcessInput() { _vm = new(Input.First()); } public override object Part1() { - _vm.Reset(); + _vm!.Reset(); var currentLocation = new Location(0, 0); var halt = IntCodeVM.HaltType.Waiting; while (halt == IntCodeVM.HaltType.Waiting) @@ -128,9 +132,9 @@ public sealed class Day15 : Day public static readonly Dictionary<(int x, int y), Location> AllLocations = new(); private readonly int _currentType; - public int DistanceToOxygenSystem = int.MaxValue - 1; private int _searchDirection = 1; + public int DistanceToOxygenSystem = int.MaxValue - 1; public Location(int x, int y, int prev = 0, int type = Empty) { diff --git a/AOC2019/Day16.cs b/AOC2019/Day16.cs index 2e49f58..b79c43d 100644 --- a/AOC2019/Day16.cs +++ b/AOC2019/Day16.cs @@ -3,17 +3,20 @@ namespace AOC2019; public sealed class Day16 : Day { private static readonly int[] BasePattern = { 0, 1, 0, -1 }; - private readonly int[] _initialList; + private int[]? _initialList; public Day16() : base(2019, 16, "Flawed Frequency Transmission") { + } + + public override void ProcessInput(){ _initialList = Input.First().Select(c => int.Parse($"{c}")).ToArray(); } public override object Part1() { const int phaseCount = 100; - var signal0 = _initialList.ToArray(); + var signal0 = _initialList!.ToArray(); var signal1 = new int[signal0.Length]; for (var i = 0; i < phaseCount; i++) @@ -27,8 +30,8 @@ public sealed class Day16 : Day public override object Part2() { const int phaseCount = 100; - var messageOffset = _initialList.Take(7).Aggregate((n, i) => n * 10 + i); - var signal = _initialList.Repeat(10_000).Skip(messageOffset).ToArray(); + var messageOffset = _initialList!.Take(7).Aggregate((n, i) => n * 10 + i); + var signal = _initialList!.Repeat(10_000).Skip(messageOffset).ToArray(); for (var p = 0; p < phaseCount; p++) { diff --git a/AOC2019/Day17.cs b/AOC2019/Day17.cs index 661080d..fb5b1e2 100644 --- a/AOC2019/Day17.cs +++ b/AOC2019/Day17.cs @@ -2,16 +2,20 @@ namespace AOC2019; public sealed class Day17 : Day { - private readonly IntCodeVM _vm; + private IntCodeVM? _vm; public Day17() : base(2019, 17, "Set and Forget") + { + } + + public override void ProcessInput() { _vm = new(Input.First()); } public override object Part1() { - _vm.Reset(); + _vm!.Reset(); _vm.Run(); var sb = new StringBuilder(); while (_vm.Output.Any()) diff --git a/AOC2019/Day18.cs b/AOC2019/Day18.cs index 7312802..bba470d 100644 --- a/AOC2019/Day18.cs +++ b/AOC2019/Day18.cs @@ -6,6 +6,10 @@ public sealed class Day18 : Day { } + public override void ProcessInput() + { + } + public override object Part1() { return ""; diff --git a/AOC2019/Day19.cs b/AOC2019/Day19.cs index 23c15a2..0219fa6 100644 --- a/AOC2019/Day19.cs +++ b/AOC2019/Day19.cs @@ -2,11 +2,14 @@ namespace AOC2019; public sealed class Day19 : Day { - private readonly long[,] _grid; - private readonly IntCodeVM _vm; + private long[,]? _grid; + private IntCodeVM? _vm; public Day19() : base(2019, 19, "Tractor Beam") { + } + + public override void ProcessInput(){ _vm = new(Input.First()); _grid = new long[50, 50]; } @@ -16,12 +19,12 @@ public sealed class Day19 : Day for (var x = 0; x < 50; x++) for (var y = 0; y < 50; y++) { - _vm.Reset(); + _vm!.Reset(); _vm.Run(x, y); - _grid[x, y] = _vm.Result; + _grid![x, y] = _vm.Result; } - return _grid.Cast().Sum(); + return _grid!.Cast().Sum(); } public override object Part2() @@ -30,7 +33,7 @@ public sealed class Day19 : Day { while (true) { - _vm.Reset(); + _vm!.Reset(); _vm.Run(x, y); if (_vm.Result == 1) break; y++; diff --git a/AOC2019/Day20.cs b/AOC2019/Day20.cs index 9b6097f..15d2205 100644 --- a/AOC2019/Day20.cs +++ b/AOC2019/Day20.cs @@ -5,6 +5,10 @@ public sealed class Day20 : Day public Day20() : base(2019, 20, "Donut Maze") { } + + public override void ProcessInput() + { + } public override object Part1() { diff --git a/AOC2019/Day21.cs b/AOC2019/Day21.cs index a440d8d..a37ef42 100644 --- a/AOC2019/Day21.cs +++ b/AOC2019/Day21.cs @@ -8,6 +8,10 @@ public sealed class Day21 : Day { _vm = new(Input.First()); } + + public override void ProcessInput() + { + } public override object Part1() { diff --git a/AOC2019/Day22.cs b/AOC2019/Day22.cs index 1fa73b8..2171ad2 100644 --- a/AOC2019/Day22.cs +++ b/AOC2019/Day22.cs @@ -5,6 +5,10 @@ public sealed class Day22 : Day public Day22() : base(2019, 22, "Slam Shuffle") { } + + public override void ProcessInput() + { + } public override object Part1() { diff --git a/AOC2019/Day23.cs b/AOC2019/Day23.cs index 9dfe688..1af65e8 100644 --- a/AOC2019/Day23.cs +++ b/AOC2019/Day23.cs @@ -5,6 +5,10 @@ public sealed class Day23 : Day public Day23() : base(2019, 23, "Category Six") { } + + public override void ProcessInput() + { + } public override object Part1() { diff --git a/AOC2019/Day24.cs b/AOC2019/Day24.cs index 485804f..44329f9 100644 --- a/AOC2019/Day24.cs +++ b/AOC2019/Day24.cs @@ -5,6 +5,10 @@ public sealed class Day24 : Day public Day24() : base(2019, 24, "Planet of Discord") { } + + public override void ProcessInput() + { + } public override object Part1() { diff --git a/AOC2019/Day25.cs b/AOC2019/Day25.cs index 729027f..b0e9ef4 100644 --- a/AOC2019/Day25.cs +++ b/AOC2019/Day25.cs @@ -5,6 +5,10 @@ public sealed class Day25 : Day public Day25() : base(2019, 25, "Cryostasis") { } + + public override void ProcessInput() + { + } public override object Part1() { diff --git a/AOC2020/Day01.cs b/AOC2020/Day01.cs index 3dcc32f..de1581a 100644 --- a/AOC2020/Day01.cs +++ b/AOC2020/Day01.cs @@ -5,20 +5,26 @@ namespace AOC2020; /// public sealed class Day01 : Day { - private readonly ImmutableHashSet _entries; + private ImmutableHashSet? _entries; - public Day01() : base(2020, 1, "Report Repair") => + public Day01() : base(2020, 1, "Report Repair") + { + } + + public override void ProcessInput() + { _entries = Input.Select(int.Parse).ToImmutableHashSet(); + } public override object Part1() { - var entry = _entries.First(e => _entries.Contains(2020 - e)); + var entry = _entries!.First(e => _entries!.Contains(2020 - e)); return entry * (2020 - entry); } public override object Part2() { - foreach (var i in _entries) + foreach (var i in _entries!) foreach (var j in _entries) foreach (var k in _entries) if (i + j + k == 2020) diff --git a/AOC2020/Day02.cs b/AOC2020/Day02.cs index 2d71496..e144170 100644 --- a/AOC2020/Day02.cs +++ b/AOC2020/Day02.cs @@ -5,16 +5,22 @@ namespace AOC2020; /// public sealed class Day02 : Day { - private readonly ImmutableList _passwords; + private ImmutableList? _passwords; - public Day02() : base(2020, 2, "Password Philosophy") => + public Day02() : base(2020, 2, "Password Philosophy") + { + } + + public override void ProcessInput() + { _passwords = Input.Select(p => new Password(p)).ToImmutableList(); + } public override object Part1() => - _passwords.Count(p => p.IsValid); + _passwords!.Count(p => p.IsValid); public override object Part2() => - _passwords.Count(p => p.IsValidByIndex); + _passwords!.Count(p => p.IsValidByIndex); private class Password { diff --git a/AOC2020/Day03.cs b/AOC2020/Day03.cs index ebcd1a2..6c2fac8 100644 --- a/AOC2020/Day03.cs +++ b/AOC2020/Day03.cs @@ -5,19 +5,21 @@ namespace AOC2020; /// public sealed class Day03 : Day { - private readonly string[] _grid; - private readonly int _width; + private string[]? _grid; public Day03() : base(2020, 3, "Toboggan Trajectory") + { + } + + public override void ProcessInput() { _grid = Input.ToArray(); - _width = _grid[0].Length; } private long CountSlope(int dx, int dy) { long hits = 0; - for (int x = 0, y = 0; y < _grid.Length; y += dy, x = (x + dx) % _width) + for (int x = 0, y = 0; y < _grid!.Length; y += dy, x = (x + dx) % _grid[0].Length) if (_grid[y][x] == '#') hits++; diff --git a/AOC2020/Day04.cs b/AOC2020/Day04.cs index a3cf01c..669d558 100644 --- a/AOC2020/Day04.cs +++ b/AOC2020/Day04.cs @@ -3,11 +3,15 @@ namespace AOC2020; /// /// Day 4: /// -public sealed class Day04 : Day +public sealed partial class Day04 : Day { - private readonly List _passports; + private List? _passports; public Day04() : base(2020, 4, "Passport Processing") + { + } + + public override void ProcessInput() { _passports = new(); @@ -27,11 +31,11 @@ public sealed class Day04 : Day if (a.Any()) _passports.Add(Passport.Parse(a)); } - public override object Part1() => _passports.Count(p => p.IsValid); + public override object Part1() => _passports!.Count(p => p.IsValid); - public override object Part2() => _passports.Count(p => p.ExtendedValidation()); + public override object Part2() => _passports!.Count(p => p.ExtendedValidation()); - private class Passport + private partial class Passport { private string? _byr; private string? _cid; @@ -58,7 +62,7 @@ public sealed class Day04 : Day // birth year if (int.TryParse(_byr, out var byr)) { - if (byr < 1920 || byr > 2002) + if (byr is < 1920 or > 2002) return false; } else @@ -69,7 +73,7 @@ public sealed class Day04 : Day // issuance year if (int.TryParse(_iyr, out var iyr)) { - if (iyr < 2010 || iyr > 2020) + if (iyr is < 2010 or > 2020) return false; } else @@ -80,7 +84,7 @@ public sealed class Day04 : Day // expiration year if (int.TryParse(_eyr, out var eyr)) { - if (eyr < 2020 || eyr > 2030) + if (eyr is < 2020 or > 2030) return false; } else @@ -94,7 +98,7 @@ public sealed class Day04 : Day var h = _hgt[..3]; if (int.TryParse(h, out var hgt)) { - if (hgt < 150 || hgt > 193) + if (hgt is < 150 or > 193) return false; } else @@ -107,7 +111,7 @@ public sealed class Day04 : Day var h = _hgt[..2]; if (int.TryParse(h, out var hgt)) { - if (hgt < 59 || hgt > 76) + if (hgt is < 59 or > 76) return false; } else @@ -121,7 +125,7 @@ public sealed class Day04 : Day } // hair color - if (!Regex.IsMatch(_hcl!, "#[0-9a-f]{6}")) + if (!HexColor().IsMatch(_hcl!)) return false; // eye color @@ -169,5 +173,8 @@ public sealed class Day04 : Day return passport; } + + [GeneratedRegex("#[0-9a-f]{6}")] + private static partial Regex HexColor(); } } diff --git a/AOC2020/Day05.cs b/AOC2020/Day05.cs index 65d9125..93177ac 100644 --- a/AOC2020/Day05.cs +++ b/AOC2020/Day05.cs @@ -5,18 +5,24 @@ namespace AOC2020; /// public sealed class Day05 : Day { - private readonly ImmutableHashSet _ids; + private ImmutableHashSet? _ids; - public Day05() : base(2020, 5, "Binary Boarding") => + public Day05() : base(2020, 5, "Binary Boarding") + { + } + + public override void ProcessInput() + { _ids = Input .Select(s => Convert.ToInt32(s.Replace('F', '0').Replace('B', '1').Replace('L', '0').Replace('R', '1'), 2)) .OrderBy(i => i) .ToImmutableHashSet(); + } - public override object Part1() => _ids.Last(); + public override object Part1() => _ids!.Last(); public override object Part2() => // arithmetic sum of full series - (_ids.Count + 1) * (_ids.First() + _ids.Last()) / 2 - _ids.Sum(); + (_ids!.Count + 1) * (_ids.First() + _ids.Last()) / 2 - _ids.Sum(); } diff --git a/AOC2020/Day06.cs b/AOC2020/Day06.cs index 1702354..43399bd 100644 --- a/AOC2020/Day06.cs +++ b/AOC2020/Day06.cs @@ -5,10 +5,14 @@ namespace AOC2020; /// public sealed class Day06 : Day { - private readonly int _countPart1; - private readonly int _countPart2; + private int _countPart1; + private int _countPart2; public Day06() : base(2020, 6, "Custom Customs") + { + } + + public override void ProcessInput() { var alphabet = "abcedfghijklmnopqrstuvwxyz".ToCharArray(); _countPart1 = 0; diff --git a/AOC2020/Day07.cs b/AOC2020/Day07.cs index 080eb98..54fb73f 100644 --- a/AOC2020/Day07.cs +++ b/AOC2020/Day07.cs @@ -5,9 +5,14 @@ namespace AOC2020; /// public sealed class Day07 : Day { - private readonly Dictionary> _rules; + private Dictionary>? _rules; - public Day07() : base(2020, 7, "Handy Haversacks") => + public Day07() : base(2020, 7, "Handy Haversacks") + { + } + + public override void ProcessInput() + { _rules = Input .Select(rule => { @@ -17,6 +22,7 @@ public sealed class Day07 : Day return (outer, inner); }) .ToDictionary(t => t.outer, t => t.inner); + } private static (int, string)? ParseQuantity(string arg) { @@ -26,7 +32,7 @@ public sealed class Day07 : Day } private int Weight(string node) => - 1 + _rules[node] + 1 + _rules![node] .Where(i => i.HasValue) .Select(i => i!.Value) .Sum(i => i.Weight * Weight(i.Name)); @@ -40,7 +46,7 @@ public sealed class Day07 : Day while (true) { node = start.Dequeue(); - foreach (var (container, contained) in _rules) + foreach (var (container, contained) in _rules!) if (contained.Any(i => i.HasValue && i.Value.Name == node) && p.Add(container)) start.Enqueue(container); diff --git a/AOC2020/Day08.cs b/AOC2020/Day08.cs index af0bd0d..a3ef2a6 100644 --- a/AOC2020/Day08.cs +++ b/AOC2020/Day08.cs @@ -5,12 +5,18 @@ namespace AOC2020; /// public sealed class Day08 : Day { - private readonly (string instruction, int value)[] _instructions; + private (string instruction, int value)[]? _instructions; private int _accumulator; private int _currentInstruction; - public Day08() : base(2020, 8, "Handheld Halting") => + public Day08() : base(2020, 8, "Handheld Halting") + { + } + + public override void ProcessInput() + { _instructions = Input.Select(ParseLine).ToArray(); + } private static (string, int) ParseLine(string line) { @@ -22,7 +28,7 @@ public sealed class Day08 : Day { _accumulator = 0; _currentInstruction = 0; - var visited = new bool[_instructions.Length + 1]; + var visited = new bool[_instructions!.Length + 1]; while (!visited[_currentInstruction] && _currentInstruction < _instructions.Length) { @@ -52,7 +58,7 @@ public sealed class Day08 : Day public override object Part2() { - for (var i = 0; i < _instructions.Length; i++) + for (var i = 0; i < _instructions!.Length; i++) // swap each nop and jmp and check if the program halts if (_instructions[i].instruction == "nop") { diff --git a/AOC2020/Day09.cs b/AOC2020/Day09.cs index 20a087d..4312a6f 100644 --- a/AOC2020/Day09.cs +++ b/AOC2020/Day09.cs @@ -5,22 +5,25 @@ namespace AOC2020; /// public sealed class Day09 : Day { - private readonly long[] _list; + private long[]? _list; private long _part1; - public Day09() : base(2020, 9, "Encoding Error") => + public Day09() : base(2020, 9, "Encoding Error") + { + } + + public override void ProcessInput() + { _list = Input.Select(long.Parse).ToArray(); + } public override object Part1() { - for (var i = 25; i < _list.Length - 25; i++) + for (var i = 25; i < _list!.Length - 25; i++) { var preamble = _list[(i - 25)..i]; if (!preamble.Any(num1 => preamble.Any(num2 => num1 + num2 == _list[i]))) - { - _part1 = _list[i]; - return _part1; - } + return _part1 = _list[i]; } return ""; @@ -28,7 +31,7 @@ public sealed class Day09 : Day public override object Part2() { - for (var i = 0; i < _list.Length; i++) + for (var i = 0; i < _list!.Length; i++) { long sum = 0; for (var j = i; j < _list.Length; j++) diff --git a/AOC2020/Day10.cs b/AOC2020/Day10.cs index e2b45fe..388e529 100644 --- a/AOC2020/Day10.cs +++ b/AOC2020/Day10.cs @@ -5,10 +5,14 @@ namespace AOC2020; /// public sealed class Day10 : Day { - private readonly int[] _adapters; - private readonly long[] _memo; + private int[]? _adapters; + private long[]? _memo; public Day10() : base(2020, 10, "Adapter Array") + { + } + + public override void ProcessInput() { var parsed = Input.Select(int.Parse).ToArray(); // add socket and device to the list @@ -18,8 +22,8 @@ public sealed class Day10 : Day private long Connections(int i) { - if (i == _adapters.Length - 1) _memo[i] = 1; - if (_memo[i] > 0) return _memo[i]; + if (i == _adapters!.Length - 1) _memo![i] = 1; + if (_memo![i] > 0) return _memo[i]; for (var j = i + 1; j <= i + 3 && j < _adapters.Length; j++) if (_adapters[j] - _adapters[i] <= 3) @@ -33,7 +37,7 @@ public sealed class Day10 : Day var ones = 0; var threes = 0; - for (var i = 0; i < _adapters.Length - 1; i++) + for (var i = 0; i < _adapters!.Length - 1; i++) switch (_adapters[i + 1] - _adapters[i]) { case 1: @@ -49,4 +53,4 @@ public sealed class Day10 : Day } public override object Part2() => Connections(0); -} +} \ No newline at end of file diff --git a/AOC2020/Day11.cs b/AOC2020/Day11.cs index 092d811..400727a 100644 --- a/AOC2020/Day11.cs +++ b/AOC2020/Day11.cs @@ -9,6 +9,10 @@ public sealed class Day11 : Day { } + public override void ProcessInput() + { + } + public override object Part1() { var prev = new LifeGame(Input); diff --git a/AOC2020/Day12.cs b/AOC2020/Day12.cs index c7022e5..855c930 100644 --- a/AOC2020/Day12.cs +++ b/AOC2020/Day12.cs @@ -9,6 +9,10 @@ public sealed class Day12 : Day { } + public override void ProcessInput() + { + } + private static void Swap(ref int x, ref int y) => (y, x) = (x, y); private (int x, int y, int sx, int sy) ProcessInstructions() diff --git a/AOC2020/Day13.cs b/AOC2020/Day13.cs index d883e3e..c5fb3da 100644 --- a/AOC2020/Day13.cs +++ b/AOC2020/Day13.cs @@ -5,11 +5,15 @@ namespace AOC2020; /// public sealed class Day13 : Day { - private readonly long[] _buses; - private readonly long _earliest; - private readonly string[] _fullSchedule; + private long[]? _buses; + private long _earliest; + private string[]? _fullSchedule; public Day13() : base(2020, 13, "Shuttle Search") + { + } + + public override void ProcessInput() { _earliest = long.Parse(Input.First()); _fullSchedule = Input.Last().Split(','); @@ -19,9 +23,9 @@ public sealed class Day13 : Day public override object Part1() { for (var i = _earliest; ; i++) - if (_buses.Any(b => i % b == 0)) + if (_buses!.Any(b => i % b == 0)) { - var bus = _buses.First(b => i % b == 0); + var bus = _buses!.First(b => i % b == 0); return bus * (i - _earliest); } } @@ -31,7 +35,7 @@ public sealed class Day13 : Day var i = 0; long result = 1, multiplier = 1; - foreach (var id in _fullSchedule) + foreach (var id in _fullSchedule!) { if (id != "x") { diff --git a/AOC2020/Day14.cs b/AOC2020/Day14.cs index ee150c3..72dbe1c 100644 --- a/AOC2020/Day14.cs +++ b/AOC2020/Day14.cs @@ -9,6 +9,10 @@ public sealed class Day14 : Day { } + public override void ProcessInput() + { + } + public override object Part1() { var writes = new Dictionary(); diff --git a/AOC2020/Day15.cs b/AOC2020/Day15.cs index bb29fec..e97b404 100644 --- a/AOC2020/Day15.cs +++ b/AOC2020/Day15.cs @@ -5,11 +5,15 @@ namespace AOC2020; /// public sealed class Day15 : Day { - private readonly int[] _turns; + private int[]? _turns; private int _current; private int _i; public Day15() : base(2020, 15, "Rambunctious Recitation") + { + } + + public override void ProcessInput() { var initial = Input.First().Split(',').Select(int.Parse).ToArray(); _turns = new int[30_000_000]; @@ -23,7 +27,7 @@ public sealed class Day15 : Day { for (; _i != 2020; _i++) { - var next = _turns[_current] > 0 ? _i - _turns[_current] : 0; + var next = _turns![_current] > 0 ? _i - _turns[_current] : 0; _turns[_current] = _i; _current = next; } @@ -35,7 +39,7 @@ public sealed class Day15 : Day { for (; _i != 30_000_000; _i++) { - var next = _turns[_current] > 0 ? _i - _turns[_current] : 0; + var next = _turns![_current] > 0 ? _i - _turns[_current] : 0; _turns[_current] = _i; _current = next; } diff --git a/AOC2020/Day16.cs b/AOC2020/Day16.cs index a72db54..9af6052 100644 --- a/AOC2020/Day16.cs +++ b/AOC2020/Day16.cs @@ -5,10 +5,14 @@ namespace AOC2020; /// public sealed class Day16 : Day { - private readonly Dictionary> _rules; - private readonly List> _tickets; + private Dictionary>? _rules; + private List>? _tickets; public Day16() : base(2020, 16, "Ticket Translation") + { + } + + public override void ProcessInput() { _tickets = new(); _rules = new(); @@ -37,17 +41,17 @@ public sealed class Day16 : Day public override object Part1() { - var allValues = _tickets.Skip(1).SelectMany(t => t); - var allRules = _rules.Values.SelectMany(r => r); + var allValues = _tickets!.Skip(1).SelectMany(t => t); + var allRules = _rules!.Values.SelectMany(r => r); return allValues.Where(t => !allRules.Any(r => r.Contains(t))).Sum(); } public override object Part2() { - var ticketFields = _tickets + var ticketFields = _tickets! // valid tickets .Where(ticket => ticket - .All(t => _rules.Values + .All(t => _rules!.Values .SelectMany(r => r) .Any(r => r.Contains(t)))) // group by index @@ -57,7 +61,7 @@ public sealed class Day16 : Day .Select((val, i) => new { Value = val, Index = i }) .ToList(); - var matchedRules = _rules + var matchedRules = _rules! // find matching rules and indices .SelectMany(x => ticketFields .Where(y => y.Value.All(z => x.Value.Any(r => r.Contains(z)))) @@ -79,6 +83,6 @@ public sealed class Day16 : Day var departureFields = matchedRules.Where(r => r.Key.StartsWith("departure")); - return departureFields.Aggregate(1L, (l, match) => l * _tickets.First()[match.Index]); + return departureFields.Aggregate(1L, (l, match) => l * _tickets!.First()[match.Index]); } } diff --git a/AOC2020/Day17.cs b/AOC2020/Day17.cs index aac0284..424c330 100644 --- a/AOC2020/Day17.cs +++ b/AOC2020/Day17.cs @@ -8,8 +8,11 @@ public sealed class Day17 : Day private readonly Dictionary<(int x, int y, int z), char> _plane = new(); private readonly Dictionary<(int x, int y, int z, int w), char> _plane4 = new(); - public Day17() : base(2020, 17, "Conway Cubes") + { + } + + public override void ProcessInput() { var input = Input.ToList(); @@ -107,14 +110,12 @@ public sealed class Day17 : Day public override object Part1() { var plane = Enumerable.Range(0, 6).Aggregate(_plane, (current, _) => Iterate(current)); - return plane.Values.Count(v => v == '#'); } public override object Part2() { var plane = Enumerable.Range(0, 6).Aggregate(_plane4, (current, _) => Iterate4(current)); - return plane.Values.Count(v => v == '#'); } -} +} \ No newline at end of file diff --git a/AOC2020/Day18.cs b/AOC2020/Day18.cs index cefb4ea..f97291c 100644 --- a/AOC2020/Day18.cs +++ b/AOC2020/Day18.cs @@ -5,10 +5,16 @@ namespace AOC2020; /// public sealed class Day18 : Day { - private readonly List _expressions; + private List? _expressions; - public Day18() : base(2020, 18, "Operation Order") => + public Day18() : base(2020, 18, "Operation Order") + { + } + + public override void ProcessInput() + { _expressions = Input.Select(line => line.Replace(" ", "")).ToList(); + } private static long Calculate(string expr, Func precedence) { @@ -62,8 +68,8 @@ public sealed class Day18 : Day } public override object Part1() => - _expressions.Sum(expr => Calculate(expr, c => c == '+' || c == '*' ? 1 : 0)); + _expressions!.Sum(expr => Calculate(expr, c => c is '+' or '*' ? 1 : 0)); public override object Part2() => - _expressions.Sum(expr => Calculate(expr, c => c switch { '+' => 2, '*' => 1, _ => 0 })); + _expressions!.Sum(expr => Calculate(expr, c => c switch { '+' => 2, '*' => 1, _ => 0 })); } diff --git a/AOC2020/Day19.cs b/AOC2020/Day19.cs index af43fdd..8d3d35b 100644 --- a/AOC2020/Day19.cs +++ b/AOC2020/Day19.cs @@ -5,11 +5,15 @@ namespace AOC2020; /// public sealed class Day19 : Day { - private readonly string[] _messages; - private readonly Dictionary _rules; - private readonly Stack _stack; + private string[]? _messages; + private Dictionary? _rules; + private Stack? _stack; public Day19() : base(2020, 19, "Monster Messages") + { + } + + public override void ProcessInput() { _rules = Input.TakeWhile(l => !string.IsNullOrWhiteSpace(l)) .Select(l => l.Split(':')) @@ -24,10 +28,10 @@ public sealed class Day19 : Day private string MakeRegexExpression(string key) { - if (_stack.Count(s => s == key) > 10) return "x"; - _stack.Push(key); + if (_stack!.Count(s => s == key) > 10) return "x"; + _stack!.Push(key); - var sub = string.Join("|", _rules[key].Select(test => test.Length switch + var sub = string.Join("|", _rules![key].Select(test => test.Length switch { 1 => test[0][0] == '"' ? test[0].Trim('"') : MakeRegexExpression(test[0]), _ => string.Join(string.Empty, test.Select(MakeRegexExpression)) @@ -39,15 +43,15 @@ public sealed class Day19 : Day public override object Part1() { var exp = new Regex($"^{MakeRegexExpression("0")}$"); - return _messages.Count(m => exp.IsMatch(m)); + return _messages!.Count(m => exp.IsMatch(m)); } public override object Part2() { // fix rules 8 and 11 - _rules["8"] = new[] { new[] { "42" }, new[] { "42", "8" } }; + _rules!["8"] = new[] { new[] { "42" }, new[] { "42", "8" } }; _rules["11"] = new[] { new[] { "42", "31" }, new[] { "42", "11", "31" } }; var exp = new Regex($"^{MakeRegexExpression("0")}$"); - return _messages.Count(m => exp.IsMatch(m)); + return _messages!.Count(m => exp.IsMatch(m)); } } diff --git a/AOC2020/Day20.cs b/AOC2020/Day20.cs index 2e6030e..2ea680d 100644 --- a/AOC2020/Day20.cs +++ b/AOC2020/Day20.cs @@ -9,6 +9,10 @@ public sealed class Day20 : Day { } + public override void ProcessInput() + { + } + public override object Part1() { var puzzlePieces = ParsePiecesFromInput(Input.ToArray()); diff --git a/AOC2020/Day21.cs b/AOC2020/Day21.cs index 9c26a51..71df5ae 100644 --- a/AOC2020/Day21.cs +++ b/AOC2020/Day21.cs @@ -5,10 +5,14 @@ namespace AOC2020; /// public sealed class Day21 : Day { - private readonly IEnumerable<(string[] Allergens, string[] Ingredients)> _parsedFoods; - private readonly IEnumerable<(string Allergen, string Ingredient)> _dangerousFoods; + private IEnumerable<(string[] Allergens, string[] Ingredients)>? _parsedFoods; + private IEnumerable<(string Allergen, string Ingredient)>? _dangerousFoods; public Day21() : base(2020, 21, "Allergen Assessment") + { + } + + public override void ProcessInput() { _parsedFoods = Input.Select(line => line.TrimEnd(')').Split(" (contains ")) .Select(split => (Allergens: split[1].Split(", "), Ingredients: split[0].Split(' '))); @@ -34,12 +38,12 @@ public sealed class Day21 : Day } public override object Part1() => - _parsedFoods + _parsedFoods! .SelectMany(i => i.Ingredients) - .Count(i => !_dangerousFoods.Select(t => t.Ingredient).Contains(i)); + .Count(i => !_dangerousFoods!.Select(t => t.Ingredient).Contains(i)); public override object Part2() => - string.Join(',', _dangerousFoods + string.Join(',', _dangerousFoods! .OrderBy(i => i.Allergen) .Select(i => i.Ingredient)); } diff --git a/AOC2020/Day22.cs b/AOC2020/Day22.cs index f0558b6..899366f 100644 --- a/AOC2020/Day22.cs +++ b/AOC2020/Day22.cs @@ -9,6 +9,10 @@ public sealed class Day22 : Day private readonly Queue _deck2 = new(); public Day22() : base(2020, 22, "Crab Combat") + { + } + + public override void ProcessInput() { Reset(); } @@ -82,7 +86,8 @@ public sealed class Day22 : Day return (deck1, deck2); } - private (Queue deck1, Queue deck2) Play(IEnumerable enumerable1, IEnumerable enumerable2, bool recursive) => + private (Queue deck1, Queue deck2) Play(IEnumerable enumerable1, IEnumerable enumerable2, + bool recursive) => Play(new(enumerable1), new(enumerable2), recursive); private static int CalculateScore(IReadOnlyCollection deck) => diff --git a/AOC2020/Day23.cs b/AOC2020/Day23.cs index 24c119b..dd77865 100644 --- a/AOC2020/Day23.cs +++ b/AOC2020/Day23.cs @@ -6,11 +6,15 @@ namespace AOC2020; public sealed class Day23 : Day { private readonly Dictionary _cups = new(); - private readonly ImmutableList _initialCups; - private readonly long[] _move; + private ImmutableList? _initialCups; + private long[]? _move; private long _current; public Day23() : base(2020, 23, "Crab Cups") + { + } + + public override void ProcessInput() { _initialCups = Input.First().Select(c => long.Parse(c.ToString())).ToImmutableList(); _current = _initialCups.First(); @@ -31,10 +35,10 @@ public sealed class Day23 : Day _cups.Remove(id); _cups[_current] = removedNext; - _move[i] = id; + _move![i] = id; } - while (_move.Contains(dest)) + while (_move!.Contains(dest)) { dest--; if (dest == 0) dest = _cups.Count + 3; @@ -43,7 +47,7 @@ public sealed class Day23 : Day for (var i = 0; i <= 2; i++) { var id = _cups[dest]; - _cups[dest] = _move[i]; + _cups[dest] = _move![i]; _cups.Add(_move[i], id); dest = _cups[dest]; } @@ -54,7 +58,7 @@ public sealed class Day23 : Day public override object Part1() { - for (var i = 0; i < _initialCups.Count; i++) + for (var i = 0; i < _initialCups!.Count; i++) _cups[_initialCups[i]] = _initialCups[(i + 1) % _initialCups.Count]; DoMoves(100); @@ -73,7 +77,7 @@ public sealed class Day23 : Day public override object Part2() { _cups.Clear(); - for (var i = 0; i < _initialCups.Count; i++) + for (var i = 0; i < _initialCups!.Count; i++) _cups[_initialCups[i]] = _initialCups[(i + 1) % _initialCups.Count]; // add a million cups diff --git a/AOC2020/Day24.cs b/AOC2020/Day24.cs index 8b094e2..ffed954 100644 --- a/AOC2020/Day24.cs +++ b/AOC2020/Day24.cs @@ -7,17 +7,21 @@ public sealed class Day24 : Day { private static readonly Dictionary Directions = new() { - { "e", (1, 0, -1) }, - { "w", (-1, 0, 1) }, + { "e", (1, 0, -1) }, + { "w", (-1, 0, 1) }, { "se", (0, 1, -1) }, { "sw", (-1, 1, 0) }, { "nw", (0, -1, 1) }, { "ne", (1, -1, 0) } }; - private Dictionary<(int q, int r, int s), Tile> _tiles; + private Dictionary<(int q, int r, int s), Tile>? _tiles; public Day24() : base(2020, 24, "Lobby Layout") + { + } + + public override void ProcessInput() { _tiles = Input .Select(Tile.FromLine) @@ -27,27 +31,27 @@ public sealed class Day24 : Day .ToDictionary(t => t.Location); } - public override object Part1() => _tiles.Count; + public override object Part1() => _tiles!.Count; public override object Part2() { foreach (var _ in Enumerable.Range(0, 100)) { - _tiles = _tiles + _tiles = _tiles! .SelectMany(t => Directions.Select(d => t.Value + d.Value)) .Distinct() .Where(t => { var neighborCount = Directions .Select(d => t + d.Value) - .Count(neighbor => _tiles.ContainsKey(neighbor.Location)); + .Count(neighbor => _tiles!.ContainsKey(neighbor.Location)); - return neighborCount == 2 || _tiles.ContainsKey(t.Location) && neighborCount == 1; + return neighborCount == 2 || _tiles!.ContainsKey(t.Location) && neighborCount == 1; }) .ToDictionary(t => t.Location); } - return _tiles.Count; + return _tiles!.Count; } private record Tile diff --git a/AOC2020/Day25.cs b/AOC2020/Day25.cs index af0167d..7ff1751 100644 --- a/AOC2020/Day25.cs +++ b/AOC2020/Day25.cs @@ -9,6 +9,10 @@ public sealed class Day25 : Day { } + public override void ProcessInput() + { + } + public override object Part1() { var cardKey = int.Parse(Input.First()); diff --git a/AOC2021/Day01.cs b/AOC2021/Day01.cs index 7c89fb7..411bb88 100644 --- a/AOC2021/Day01.cs +++ b/AOC2021/Day01.cs @@ -5,16 +5,20 @@ namespace AOC2021; /// public sealed class Day01 : Day { - private readonly List _readings; - + private List? _readings; + public Day01() : base(2021, 1, "Sonar Sweep") + { + } + + public override void ProcessInput() { _readings = Input.Select(int.Parse).ToList(); } public override object Part1() => - Enumerable.Range(0, _readings.Count - 1).Count(i => _readings[i + 1] > _readings[i]); + Enumerable.Range(0, _readings!.Count - 1).Count(i => _readings[i + 1] > _readings[i]); public override object Part2() => - Enumerable.Range(0, _readings.Count - 3).Count(i => _readings[i + 3] > _readings[i]); + Enumerable.Range(0, _readings!.Count - 3).Count(i => _readings[i + 3] > _readings[i]); } diff --git a/AOC2021/Day02.cs b/AOC2021/Day02.cs index 81f02b0..3627262 100644 --- a/AOC2021/Day02.cs +++ b/AOC2021/Day02.cs @@ -9,6 +9,10 @@ public sealed class Day02 : Day { } + public override void ProcessInput() + { + } + public override object Part1() { int horiz = 0, depth = 0; diff --git a/AOC2021/Day03.cs b/AOC2021/Day03.cs index 9122acc..a5a6cdb 100644 --- a/AOC2021/Day03.cs +++ b/AOC2021/Day03.cs @@ -5,16 +5,20 @@ namespace AOC2021; /// public sealed class Day03 : Day { - private readonly List _report; - + private List? _report; + public Day03() : base(2021, 3, "Binary Diagnostic") + { + } + + public override void ProcessInput() { _report = Input.ToList(); } public override object Part1() { - var l = _report.Count / 2; + var l = _report!.Count / 2; var g = new StringBuilder(); var e = new StringBuilder(); @@ -33,8 +37,8 @@ public sealed class Day03 : Day public override object Part2() { - var o = _report; - var c = _report; + var o = _report!; + var c = _report!; char MostCommon(int i, IReadOnlyCollection report) => report.Count(r => r[i] == '1') >= report.Count / 2.0 ? '1' : '0'; diff --git a/AOC2021/Day04.cs b/AOC2021/Day04.cs index d993431..4e969e7 100644 --- a/AOC2021/Day04.cs +++ b/AOC2021/Day04.cs @@ -5,11 +5,15 @@ namespace AOC2021; /// public sealed class Day04 : Day { - private readonly List _call; - private readonly List> _boards; - private readonly int _size; - + private List? _call; + private List>? _boards; + private int _size; + public Day04() : base(2021, 4, "Giant Squid") + { + } + + public override void ProcessInput() { _call = Input.First().Split(',').Select(int.Parse).ToList(); _boards = new(); @@ -41,34 +45,34 @@ public sealed class Day04 : Day b = FirstWin(i); } - var called = _call.Take(i).ToHashSet(); - return called.Last() * _boards[b].Where(x => !called.Contains(x)).Sum(); + var called = _call!.Take(i).ToHashSet(); + return called.Last() * _boards![b].Where(x => !called.Contains(x)).Sum(); } public override object Part2() { Dictionary wonBoards = new(); - for (var i = 0; i < _boards.Count; i++) + for (var i = 0; i < _boards!.Count; i++) wonBoards[i] = false; var j = _size; while (wonBoards.Values.Count(b => b) != wonBoards.Count - 1) { - var c = _call.Take(j).ToHashSet(); + var c = _call!.Take(j).ToHashSet(); for (var u = 0; u < _boards.Count; u++) wonBoards[u] = HasWin(c, _boards[u]); j++; } - var called = _call.Take(j).ToHashSet(); + var called = _call!.Take(j).ToHashSet(); var b = wonBoards.Single(kvp => !kvp.Value).Key; return called.Last() * _boards[b].Where(x => !called.Contains(x)).Sum(); } private int FirstWin(int i) { - var c = _call.Take(i).ToHashSet(); - for (var j = 0; j < _boards.Count; j++) + var c = _call!.Take(i).ToHashSet(); + for (var j = 0; j < _boards!.Count; j++) if (HasWin(c, _boards[j])) return j; return -1; } diff --git a/AOC2021/Day05.cs b/AOC2021/Day05.cs index 2823a00..fc180dd 100644 --- a/AOC2021/Day05.cs +++ b/AOC2021/Day05.cs @@ -3,15 +3,19 @@ namespace AOC2021; /// /// Day 5: /// -public sealed class Day05 : Day +public sealed partial class Day05 : Day { public Day05() : base(2021, 5, "Hydrothermal Venture") { } + public override void ProcessInput() + { + } + private int Solve(bool diagonals = false) => Input - .Select(s => Regex.Split(s, @"\D+").Select(int.Parse).ToList()) + .Select(s => NonDigits().Split(s).Select(int.Parse).ToList()) .Where(t => diagonals || t[0] == t[2] || t[1] == t[3]) .SelectMany(t => Enumerable.Range(0, Math.Max(Math.Abs(t[0] - t[2]), Math.Abs(t[1] - t[3])) + 1) @@ -24,4 +28,7 @@ public sealed class Day05 : Day public override object Part1() => Solve(); public override object Part2() => Solve(diagonals: true); + + [GeneratedRegex(@"\D+")] + private static partial Regex NonDigits(); } diff --git a/AOC2021/Day06.cs b/AOC2021/Day06.cs index 0f470f4..287df2c 100644 --- a/AOC2021/Day06.cs +++ b/AOC2021/Day06.cs @@ -5,9 +5,13 @@ namespace AOC2021; /// public sealed class Day06 : Day { - private readonly long _p1, _p2; + private long _p1, _p2; public Day06() : base(2021, 6, "Lanternfish") + { + } + + public override void ProcessInput() { var fishes = Input.First().Split(',').Select(long.Parse).ToList(); Dictionary counts = new(); diff --git a/AOC2021/Day07.cs b/AOC2021/Day07.cs index aafeabb..a488411 100644 --- a/AOC2021/Day07.cs +++ b/AOC2021/Day07.cs @@ -5,9 +5,13 @@ namespace AOC2021; /// public sealed class Day07 : Day { - private readonly List _tape; - + private List? _tape; + public Day07() : base(2021, 7, "The Treachery of Whales") + { + } + + public override void ProcessInput() { _tape = Input.First().Split(',').Select(long.Parse).OrderBy(i => i).ToList(); } @@ -16,13 +20,13 @@ public sealed class Day07 : Day public override object Part1() { - var i = _tape[_tape.Count / 2]; + var i = _tape![_tape.Count / 2]; return _tape.Select(t => Math.Abs(t - i)).Sum(); } public override object Part2() { - var avg = (decimal)_tape.Sum() / _tape.Count; + var avg = (decimal)_tape!.Sum() / _tape!.Count; var floor = _tape.Select(t => ArithmeticSumTo(Math.Abs(t - (long)Math.Floor(avg)))).Sum(); var ceil = _tape.Select(t => ArithmeticSumTo(Math.Abs(t - (long)Math.Ceiling(avg)))).Sum(); return Math.Min(floor, ceil); diff --git a/AOC2021/Day08.cs b/AOC2021/Day08.cs index f3684c9..cec396f 100644 --- a/AOC2021/Day08.cs +++ b/AOC2021/Day08.cs @@ -12,6 +12,10 @@ public sealed class Day08 : Day { } + public override void ProcessInput() + { + } + private static int MatchDigit(string lit) => lit switch { diff --git a/AOC2021/Day09.cs b/AOC2021/Day09.cs index 13bd668..b471958 100644 --- a/AOC2021/Day09.cs +++ b/AOC2021/Day09.cs @@ -7,11 +7,15 @@ namespace AOC2021; /// public sealed class Day09 : Day { - private readonly int _part1Sum; - private readonly List<(int x, int y)> _lowPoints; - private readonly List _map; + private int _part1Sum; + private List<(int x, int y)>? _lowPoints; + private List? _map; public Day09() : base(2021, 9, "Smoke Basin") + { + } + + public override void ProcessInput() { _part1Sum = 0; _lowPoints = new(); @@ -36,7 +40,7 @@ public sealed class Day09 : Day public override object Part2() { var sizes = new List(); - foreach (var (x, y) in _lowPoints) + foreach (var (x, y) in _lowPoints!) { var s = 0; var seen = new HashSet<(int x, int y)>(); @@ -44,11 +48,11 @@ public sealed class Day09 : Day IEnumerable<(int x, int y)> Traverse((int x, int y) p) { var (i, j) = p; - if (_map[j][i] == '9') yield break; + if (_map![j][i] == '9') yield break; if (seen.Contains((i, j))) yield break; seen.Add((i, j)); s++; - + if (j > 0) yield return (i, j - 1); if (j < _map.Count - 1) @@ -68,4 +72,4 @@ public sealed class Day09 : Day .Take(3) .Aggregate(1L, (a, b) => a * b); } -} +} \ No newline at end of file diff --git a/AOC2021/Day10.cs b/AOC2021/Day10.cs index 0b94417..76f6ca2 100644 --- a/AOC2021/Day10.cs +++ b/AOC2021/Day10.cs @@ -29,10 +29,15 @@ public sealed class Day10 : Day { '<', 4 } }; - private readonly long _score1; private readonly List _scores2 = new(); + private long _score1; + public Day10() : base(2021, 10, "Syntax Scoring") + { + } + + public override void ProcessInput() { _score1 = 0L; foreach (var line in Input) diff --git a/AOC2021/Day11.cs b/AOC2021/Day11.cs index e99483c..76fbcae 100644 --- a/AOC2021/Day11.cs +++ b/AOC2021/Day11.cs @@ -5,11 +5,14 @@ namespace AOC2021; /// public sealed class Day11 : Day { - private int _flashTally; - private readonly int _flashesAfter100, _totalTurns; - private readonly int[][] _octopusField; - + private int _flashTally, _flashesAfter100, _totalTurns; + private int[][]? _octopusField; + public Day11() : base(2021, 11, "Dumbo Octopus") + { + } + + public override void ProcessInput() { _octopusField = Input.Select(line => line.Select(c => int.Parse($"{c}")).ToArray()).ToArray(); @@ -44,7 +47,7 @@ public sealed class Day11 : Day private void FlashAt(int r, int c) { _flashTally++; - _octopusField[r][c] = -1; + _octopusField![r][c] = -1; foreach (var rr in new[] { -1, 0, 1 }.Select(dr => dr + r)) foreach (var cc in new[] { -1, 0, 1 }.Select(dc => dc + c)) if (0 <= rr && rr < _octopusField.Length && 0 <= cc && cc < _octopusField[0].Length && _octopusField[rr][cc] != -1) diff --git a/AOC2021/Day12.cs b/AOC2021/Day12.cs index d956f38..740ca65 100644 --- a/AOC2021/Day12.cs +++ b/AOC2021/Day12.cs @@ -8,6 +8,10 @@ public sealed class Day12 : Day private readonly Dictionary> _edges = new(); public Day12() : base(2021, 12, "Passage Pathing") + { + } + + public override void ProcessInput() { foreach (var line in Input) { diff --git a/AOC2021/Day13.cs b/AOC2021/Day13.cs index 6f2cde0..0b063a8 100644 --- a/AOC2021/Day13.cs +++ b/AOC2021/Day13.cs @@ -7,10 +7,14 @@ namespace AOC2021; /// public sealed class Day13 : Day { - private List<(int x, int y)> _dots; - private readonly List<(char axis, int index)> _folds; - + private List<(int x, int y)>? _dots; + private List<(char axis, int index)>? _folds; + public Day13() : base(2021, 13, "Transparent Origami") + { + } + + public override void ProcessInput() { var s = Input.Split("").ToList(); @@ -47,14 +51,14 @@ public sealed class Day13 : Day private string PrintGrid() { - var xMax = _dots.Max(g => g.x); - var yMax = _dots.Max(g => g.y); + var xMax = _dots!.Max(g => g.x); + var yMax = _dots!.Max(g => g.y); var s = new StringBuilder(); for (var y = 0; y <= yMax; y++) { for (var x = 0; x <= xMax; x++) - s.Append(_dots.Contains((x, y)) ? "█" : "▒"); + s.Append(_dots!.Contains((x, y)) ? "█" : "▒"); if (y < yMax) s.AppendLine(); } @@ -63,12 +67,12 @@ public sealed class Day13 : Day } public override object Part1() => - DoFold(_dots, _folds[0].axis, _folds[0].index).Count; + DoFold(_dots!, _folds![0].axis, _folds[0].index).Count; public override object Part2() { - foreach (var (axis, at) in _folds) - _dots = DoFold(_dots, axis, at); + foreach (var (axis, at) in _folds!) + _dots = DoFold(_dots!, axis, at); return PrintGrid(); } diff --git a/AOC2021/Day14.cs b/AOC2021/Day14.cs index ffb7f04..b4fbebc 100644 --- a/AOC2021/Day14.cs +++ b/AOC2021/Day14.cs @@ -5,10 +5,14 @@ namespace AOC2021; /// public sealed class Day14 : Day { - private readonly string _template; - private readonly Dictionary _substitutionPairs; + private string? _template; + private Dictionary? _substitutionPairs; public Day14() : base(2021, 14, "Extended Polymerization") + { + } + + public override void ProcessInput() { _template = Input.First(); _substitutionPairs = Input.Skip(2).Select(l => l.Split(" -> ")).ToDictionary(k => k[0], v => v[1]); @@ -21,7 +25,7 @@ public sealed class Day14 : Day for (var i = 0; i < input.Length - 1; i++) { var k = input.Substring(i, 2); - if (_substitutionPairs.ContainsKey(k)) + if (_substitutionPairs!.ContainsKey(k)) { result.Append(k[0]); result.Append(_substitutionPairs[k]); @@ -40,7 +44,7 @@ public sealed class Day14 : Day private long Solve(int steps) { var moleculeCounts = new Dictionary(); - foreach (var i in Enumerable.Range(0, _template.Length - 1)) + foreach (var i in Enumerable.Range(0, _template!.Length - 1)) { var k = _template.Substring(i, 2); moleculeCounts[k] = moleculeCounts.GetValueOrDefault(k) + 1; @@ -51,7 +55,7 @@ public sealed class Day14 : Day var updated = new Dictionary(); foreach (var (molecule, count) in moleculeCounts) { - var (a, n, b) = (molecule[0], _substitutionPairs[molecule], molecule[1]); + var (a, n, b) = (molecule[0], _substitutionPairs![molecule], molecule[1]); updated[$"{a}{n}"] = updated.GetValueOrDefault($"{a}{n}") + count; updated[$"{n}{b}"] = updated.GetValueOrDefault($"{n}{b}") + count; } @@ -74,9 +78,9 @@ public sealed class Day14 : Day public override object Part1() { - var s = Enumerable.Range(0, 10).Aggregate(_template, (current, _) => DoStep(current)); + var s = Enumerable.Range(0, 10).Aggregate(_template, (current, _) => DoStep(current!)); - var most = s.ToCharArray() + var most = s!.ToCharArray() .GroupBy(c => c) .OrderByDescending(g => g.Count()) .Select(g => g.Count()) diff --git a/AOC2021/Day15.cs b/AOC2021/Day15.cs index 91924f1..7a6afa4 100644 --- a/AOC2021/Day15.cs +++ b/AOC2021/Day15.cs @@ -15,11 +15,15 @@ public record Node public sealed class Day15 : Day { private static readonly (int x, int y)[] Adjacent = { (-1, 0), (1, 0), (0, -1), (0, 1) }; - private readonly Dictionary<(int x, int y), Node> _fullGrid; - private readonly Dictionary<(int x, int y), Node> _grid; - private readonly int _width; + private Dictionary<(int x, int y), Node>? _fullGrid; + private Dictionary<(int x, int y), Node>? _grid; + private int _width; public Day15() : base(2021, 15, "Chiton") + { + } + + public override void ProcessInput() { _grid = Input .SelectMany((line, y) => @@ -76,8 +80,8 @@ public sealed class Day15 : Day } public override object Part1() => - DijkstraCost(_grid, _grid[(_width - 1, _width - 1)]); + DijkstraCost(_grid!, _grid![(_width - 1, _width - 1)]); public override object Part2() => - DijkstraCost(_fullGrid, _fullGrid[(5 * _width - 1, 5 * _width - 1)]); + DijkstraCost(_fullGrid!, _fullGrid![(5 * _width - 1, 5 * _width - 1)]); } diff --git a/AOC2021/Day16.cs b/AOC2021/Day16.cs index d26d47d..dc77ba3 100644 --- a/AOC2021/Day16.cs +++ b/AOC2021/Day16.cs @@ -5,9 +5,13 @@ namespace AOC2021; /// public sealed class Day16 : Day { - private readonly Packet _packet; + private Packet? _packet; public Day16() : base(2021, 16, "Packet Decoder") + { + } + + public override void ProcessInput() { var bits = string.Join(string.Empty, Input.First().Select(c => Convert.ToString(Convert.ToInt32(c.ToString(), 16), 2).PadLeft(4, '0'))); @@ -81,7 +85,7 @@ public sealed class Day16 : Day }; } - public override object Part1() => _packet.VersionTotal; + public override object Part1() => _packet!.VersionTotal; - public override object Part2() => _packet.Eval; + public override object Part2() => _packet!.Eval; } diff --git a/AOC2021/Day17.cs b/AOC2021/Day17.cs index b5a1409..64142bb 100644 --- a/AOC2021/Day17.cs +++ b/AOC2021/Day17.cs @@ -5,9 +5,13 @@ namespace AOC2021; /// public sealed class Day17 : Day { - private readonly List _target; + private List? _target; public Day17() : base(2021, 17, "Trick Shot") + { + } + + public override void ProcessInput() { _target = Input.First() .Split(' ', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries) @@ -20,7 +24,7 @@ public sealed class Day17 : Day public override object Part1() { - var initialYVelocity = Math.Abs(_target[2]) - 1; + var initialYVelocity = Math.Abs(_target![2]) - 1; return (initialYVelocity + 1) * initialYVelocity / 2; } @@ -28,7 +32,7 @@ public sealed class Day17 : Day { var successfulVelocities = new HashSet<(int x, int y)>(); var xMin = 1; - while (xMin * (xMin + 1) / 2 < _target[0]) xMin++; + while (xMin * (xMin + 1) / 2 < _target![0]) xMin++; for (var x = xMin; x <= _target[1]; x++) for (var y = _target[2]; y < Math.Abs(_target[2]); y++) diff --git a/AOC2021/Day18.cs b/AOC2021/Day18.cs index 30fc17f..f22cb73 100644 --- a/AOC2021/Day18.cs +++ b/AOC2021/Day18.cs @@ -5,9 +5,13 @@ namespace AOC2021; /// public sealed class Day18 : Day { - private readonly List _fishes; + private List? _fishes; public Day18() : base(2021, 18, "Snailfish") + { + } + + public override void ProcessInput() { _fishes = Input.ToList(); } @@ -106,12 +110,12 @@ public sealed class Day18 : Day } public override object Part1() => - Magnitude(_fishes.Skip(1).Aggregate(Parse(_fishes.First()), (a, b) => Add(a, Parse(b))).Root); + Magnitude(_fishes!.Skip(1).Aggregate(Parse(_fishes!.First()), (a, b) => Add(a, Parse(b))).Root); public override object Part2() { var best = 0L; - for (var i = 0; i < _fishes.Count; i++) + for (var i = 0; i < _fishes!.Count; i++) best = _fishes .Where((_, j) => i != j) .Select(t => Add(Parse(_fishes[i]), Parse(t))) diff --git a/AOC2021/Day19.cs b/AOC2021/Day19.cs index 30c5342..fe3e57f 100644 --- a/AOC2021/Day19.cs +++ b/AOC2021/Day19.cs @@ -8,10 +8,14 @@ public sealed class Day19 : Day private static readonly (int, int, int)[] Axes = { (0, 1, 0), (0, -1, 0), (1, 0, 0), (-1, 0, 0), (0, 0, 1), (0, 0, -1) }; - private readonly List> _scans; + private List>? _scans; private List> _scanners = new(); public Day19() : base(2021, 19, "Beacon Scanner") + { + } + + public override void ProcessInput() { _scans = Input .Aggregate(new List>(), (list, line) => @@ -126,7 +130,7 @@ public sealed class Day19 : Day public override object Part1() { - var scans = _scans; + var scans = _scans!; _scanners = scans.Select(_ => new HashSet { (0, 0, 0) }).ToList(); while (scans.Count > 1) (scans, _scanners) = Reduce(scans, _scanners); diff --git a/AOC2021/Day20.cs b/AOC2021/Day20.cs index 597f9ad..99b4ff5 100644 --- a/AOC2021/Day20.cs +++ b/AOC2021/Day20.cs @@ -5,10 +5,14 @@ namespace AOC2021; /// public sealed class Day20 : Day { - private readonly ImmutableArray _enhancementAlgorithm; - private readonly Image _initialImage; + private ImmutableArray _enhancementAlgorithm; + private Image? _initialImage; public Day20() : base(2021, 20, "Trench Map") + { + } + + public override void ProcessInput() { _enhancementAlgorithm = Input.First().Select(ch => ch == '#').ToImmutableArray(); _initialImage = Parse(Input.Skip(2).ToList()); @@ -45,10 +49,10 @@ public sealed class Day20 : Day } public override object Part1() => - Enhance(_initialImage, 2).PixelCount; + Enhance(_initialImage!, 2).PixelCount; public override object Part2() => - Enhance(_initialImage, 50).PixelCount; + Enhance(_initialImage!, 50).PixelCount; private record struct Point(int X, int Y); @@ -66,6 +70,7 @@ public sealed class Day20 : Day { private bool this[Point pt] => Bounds.Contains(pt) ? Pixels.Contains(pt) : InfiniteValue; + public int PixelCount => Pixels.Count(Bounds.Contains); public int GetEnhanceInput(Point pt) @@ -78,4 +83,4 @@ public sealed class Day20 : Day return values.Aggregate(0, (p, n) => (p << 1) | n); } } -} +} \ No newline at end of file diff --git a/AOC2021/Day21.cs b/AOC2021/Day21.cs index 6bf4846..6e0cd0a 100644 --- a/AOC2021/Day21.cs +++ b/AOC2021/Day21.cs @@ -5,13 +5,17 @@ namespace AOC2021; /// public sealed class Day21 : Day { - private readonly int _player1, _player2; + private int _player1, _player2; private readonly Dictionary _possibleRollOutComes = new(); private int _deterministicDie = 1; private int _rollCount; private ulong _player1Victories, _player2Victories; public Day21() : base(2021, 21, "Dirac Dice") + { + } + + public override void ProcessInput() { var s = Input .Select(l => l.Split(": ")[1]) diff --git a/AOC2021/Day22.cs b/AOC2021/Day22.cs index 3058b32..d206d8e 100644 --- a/AOC2021/Day22.cs +++ b/AOC2021/Day22.cs @@ -6,8 +6,12 @@ namespace AOC2021; public sealed class Day22 : Day { private readonly List _instructions = new(); - + public Day22() : base(2021, 22, "Reactor Reboot") + { + } + + public override void ProcessInput() { foreach (var line in Input) { diff --git a/AOC2021/Day23.cs b/AOC2021/Day23.cs index 250f8db..f57e177 100644 --- a/AOC2021/Day23.cs +++ b/AOC2021/Day23.cs @@ -5,9 +5,13 @@ namespace AOC2021; /// public sealed class Day23 : Day { - private readonly List _crabs; + private List? _crabs; public Day23() : base(2021, 23, "Amphipod") + { + } + + public override void ProcessInput() { _crabs = Input.SelectMany(l => l).Where(char.IsLetter).ToList(); } @@ -83,7 +87,7 @@ public sealed class Day23 : Day public override object Part1() { var start = new State(" ", - $"{_crabs[0]}{_crabs[4]}", + $"{_crabs![0]}{_crabs[4]}", $"{_crabs[1]}{_crabs[5]}", $"{_crabs[2]}{_crabs[6]}", $"{_crabs[3]}{_crabs[7]}"); @@ -95,7 +99,7 @@ public sealed class Day23 : Day public override object Part2() { var start = new State(" ", - $"{_crabs[0]}DD{_crabs[4]}", + $"{_crabs![0]}DD{_crabs[4]}", $"{_crabs[1]}CB{_crabs[5]}", $"{_crabs[2]}BA{_crabs[6]}", $"{_crabs[3]}AC{_crabs[7]}"); diff --git a/AOC2021/Day24.cs b/AOC2021/Day24.cs index 1b8bbb8..f71e873 100644 --- a/AOC2021/Day24.cs +++ b/AOC2021/Day24.cs @@ -8,6 +8,10 @@ public sealed class Day24 : Day private readonly Dictionary _keys = new(); public Day24() : base(2021, 24, "Arithmetic Logic Unit") + { + } + + public override void ProcessInput() { var lines = Input.ToList(); var pairs = Enumerable.Range(0, 14) diff --git a/AOC2021/Day25.cs b/AOC2021/Day25.cs index 1e570ed..8054bd5 100644 --- a/AOC2021/Day25.cs +++ b/AOC2021/Day25.cs @@ -5,9 +5,13 @@ namespace AOC2021; /// public sealed class Day25 : Day { - private readonly char[][] _cucumbers; + private char[][]? _cucumbers; public Day25() : base(2021, 25, "Sea Cucumber") + { + } + + public override void ProcessInput() { _cucumbers = Input.Select(l => l.ToCharArray()).ToArray(); } diff --git a/AOC2022/Day01.cs b/AOC2022/Day01.cs index aad33d7..80b6a88 100644 --- a/AOC2022/Day01.cs +++ b/AOC2022/Day01.cs @@ -7,9 +7,13 @@ namespace AOC2022; /// public sealed class Day01 : Day { - private readonly List> _elfCalories; + private List>? _elfCalories; public Day01() : base(2022, 1, "Calorie Counting") + { + } + + public override void ProcessInput() { _elfCalories = Input .Split("") @@ -18,7 +22,7 @@ public sealed class Day01 : Day .ToList(); } - public override object Part1() => _elfCalories.First().Sum(); + public override object Part1() => _elfCalories!.First().Sum(); - public override object Part2() => _elfCalories.Take(3).Sum(e => e.Sum()); + public override object Part2() => _elfCalories!.Take(3).Sum(e => e.Sum()); } diff --git a/AOC2022/Day02.cs b/AOC2022/Day02.cs index 0467335..96c1787 100644 --- a/AOC2022/Day02.cs +++ b/AOC2022/Day02.cs @@ -5,9 +5,13 @@ namespace AOC2022; /// public sealed class Day02 : Day { - private readonly List _rounds; + private List? _rounds; public Day02() : base(2022, 2, "Rock Paper Scissors") + { + } + + public override void ProcessInput() { _rounds = Input.Select(line => line.Split(' ')).ToList(); } @@ -15,7 +19,7 @@ public sealed class Day02 : Day public override object Part1() { var score = 0; - foreach (var round in _rounds) + foreach (var round in _rounds!) { var me = round[1][0]; var elf = round[0][0]; @@ -34,7 +38,7 @@ public sealed class Day02 : Day public override object Part2() { var score = 0; - foreach (var round in _rounds) + foreach (var round in _rounds!) { var c = round[0][0]; switch (round[1][0]) diff --git a/AOC2022/Day03.cs b/AOC2022/Day03.cs index 6a0f82a..45c1348 100644 --- a/AOC2022/Day03.cs +++ b/AOC2022/Day03.cs @@ -8,6 +8,10 @@ public sealed class Day03 : Day public Day03() : base(2022, 3, "Rucksack Reorganization") { } + + public override void ProcessInput() + { + } public override object Part1() => Input.Sum(rucksack => RankItem(rucksack.Chunk(rucksack.Length / 2).Aggregate>((a, b) => a.Intersect(b)).Single())); diff --git a/AOC2022/Day04.cs b/AOC2022/Day04.cs index 56cf0c8..d287295 100644 --- a/AOC2022/Day04.cs +++ b/AOC2022/Day04.cs @@ -5,9 +5,13 @@ namespace AOC2022; /// public sealed class Day04 : Day { - private readonly List<(Range r1, Range r2)> _ranges; + private List<(Range r1, Range r2)>? _ranges; public Day04() : base(2022, 4, "Camp Cleanup") + { + } + + public override void ProcessInput() { _ranges = Input .Select(line => line.Split(',').SelectMany(q => q.Split('-')).Select(int.Parse).ToList()) @@ -16,8 +20,8 @@ public sealed class Day04 : Day } public override object Part1() => - _ranges.Count(r => r.r1.Contains(r.r2) || r.r2.Contains(r.r1)); + _ranges!.Count(r => r.r1.Contains(r.r2) || r.r2.Contains(r.r1)); public override object Part2() => - _ranges.Count(r => r.r1.Overlaps(r.r2)); + _ranges!.Count(r => r.r1.Overlaps(r.r2)); } \ No newline at end of file diff --git a/AOC2022/Day05.cs b/AOC2022/Day05.cs index c7538d6..f925aec 100644 --- a/AOC2022/Day05.cs +++ b/AOC2022/Day05.cs @@ -7,11 +7,15 @@ namespace AOC2022; /// public sealed class Day05 : Day { - private readonly IEnumerable<(int quantity, int from, int to)> _instructions; - private readonly List> _stacks; - private readonly List> _stacksPart2; + private IEnumerable<(int quantity, int from, int to)>? _instructions; + private List>? _stacks; + private List>? _stacksPart2; public Day05() : base(2022, 5, "Supply Stacks") + { + } + + public override void ProcessInput() { var s = Input.Split("").ToList(); var stackDiagram = s[0]; @@ -45,22 +49,22 @@ public sealed class Day05 : Day public override object Part1() { - foreach (var (quantity, from, to) in _instructions) - Enumerable.Range(0, quantity).ForEach(_ => _stacks[to].Push(_stacks[from].Pop())); + foreach (var (quantity, from, to) in _instructions!) + Enumerable.Range(0, quantity).ForEach(_ => _stacks![to].Push(_stacks[from].Pop())); - return PeekStackTops(_stacks); + return PeekStackTops(_stacks!); } public override object Part2() { - foreach (var (quantity, from, to) in _instructions) + foreach (var (quantity, from, to) in _instructions!) { var crane = new Stack(quantity); - Enumerable.Range(0, quantity).ForEach(_ => crane.Push(_stacksPart2[from].Pop())); + Enumerable.Range(0, quantity).ForEach(_ => crane.Push(_stacksPart2![from].Pop())); - while (crane.Any()) _stacksPart2[to].Push(crane.Pop()); + while (crane.Any()) _stacksPart2![to].Push(crane.Pop()); } - return PeekStackTops(_stacksPart2); + return PeekStackTops(_stacksPart2!); } } \ No newline at end of file diff --git a/AOC2022/Day06.cs b/AOC2022/Day06.cs index aa1aec8..7c9db8d 100644 --- a/AOC2022/Day06.cs +++ b/AOC2022/Day06.cs @@ -5,11 +5,19 @@ namespace AOC2022; /// public sealed class Day06 : Day { - private readonly string _signal; - public Day06() : base(2022, 6, "Tuning Trouble") => _signal = Input.First(); + private string? _signal; + + public Day06() : base(2022, 6, "Tuning Trouble") + { + } + + public override void ProcessInput() + { + _signal = Input.First(); + } private int DistinctSubstringIndex(int n) => - Enumerable.Range(0, _signal.Length).First(i => _signal.Substring(i, n).Distinct().Count() == n) + n; + Enumerable.Range(0, _signal!.Length).First(i => _signal.Substring(i, n).Distinct().Count() == n) + n; public override object Part1() => DistinctSubstringIndex(4); public override object Part2() => DistinctSubstringIndex(14); diff --git a/AOC2022/Day07.cs b/AOC2022/Day07.cs index eb28d45..416c46b 100644 --- a/AOC2022/Day07.cs +++ b/AOC2022/Day07.cs @@ -8,6 +8,10 @@ public sealed class Day07 : Day private readonly DefaultDictionary _dirs = new(); public Day07() : base(2022, 7, "No Space Left On Device") + { + } + + public override void ProcessInput() { var path = new Stack(); foreach (var line in Input) diff --git a/AOC2022/Day08.cs b/AOC2022/Day08.cs index 0aae121..96a07d2 100644 --- a/AOC2022/Day08.cs +++ b/AOC2022/Day08.cs @@ -5,16 +5,20 @@ namespace AOC2022; /// public sealed class Day08 : Day { - private readonly int[][] _trees; + private int[][]? _trees; public Day08() : base(2022, 8, "Treetop Tree House") + { + } + + public override void ProcessInput() { _trees = Input.Select(line => line.Select(c => c - '0').ToArray()).ToArray(); } private (bool isVisible, int scenicScore) ScoreCoord(int x, int y) { - var height = _trees[y][x]; + var height = _trees![y][x]; bool top = true, left = true, bottom = true, right = true; int upMoves = 0, leftMoves = 0, downMoves = 0, rightMoves = 0; @@ -62,13 +66,13 @@ public sealed class Day08 : Day } public override object Part1() => - Enumerable.Range(0, _trees.Length) + Enumerable.Range(0, _trees!.Length) .Sum(y => Enumerable.Range(0, _trees[0].Length).Count(x => ScoreCoord(x, y).isVisible)); public override object Part2() { var max = 0; - for (var y = 0; y < _trees.Length; y++) + for (var y = 0; y < _trees!.Length; y++) for (var x = 0; x < _trees[0].Length; x++) { var (_, score) = ScoreCoord(x, y); diff --git a/DayXX.cs.txt b/DayXX.cs.txt index cf4ccca..41bb861 100644 --- a/DayXX.cs.txt +++ b/DayXX.cs.txt @@ -8,8 +8,18 @@ public sealed class DayXX : Day public DayXX() : base(YYYY, Q, "Puzzle Name") { } + + public override void ProcessInput() + { + } - public override object Part1() => ""; + public override object Part1() + { + return ""; + } - public override object Part2() => ""; + public override object Part2() + { + return ""; + } }