From 789247aedf7f714c3e4956f6fbef7ad20c4c2bbd Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Thu, 27 Oct 2022 12:36:21 -0400 Subject: [PATCH] add Year to Day class --- AOC.Common/Day.cs | 8 +++--- AOC.Test/AOC.Test.csproj | 1 + AOC.Test/Common.cs | 33 +++++++++++++++++++++++ AOC.Test/Test2019.cs | 28 +------------------ AOC.Test/Test2020.cs | 25 +---------------- AOC.Test/Test2021.cs | 55 ++------------------------------------ AOC.Test/Test2022.cs | 13 +++++++++ AOC2019/Day01.cs | 2 +- AOC2019/Day02.cs | 2 +- AOC2019/Day03.cs | 2 +- AOC2019/Day04.cs | 2 +- AOC2019/Day05.cs | 2 +- AOC2019/Day06.cs | 2 +- AOC2019/Day07.cs | 2 +- AOC2019/Day08.cs | 2 +- AOC2019/Day09.cs | 2 +- AOC2019/Day10.cs | 2 +- AOC2019/Day11.cs | 4 +-- AOC2019/Day12.cs | 2 +- AOC2019/Day13.cs | 2 +- AOC2019/Day14.cs | 2 +- AOC2019/Day15.cs | 2 +- AOC2019/Day16.cs | 2 +- AOC2019/Day17.cs | 2 +- AOC2019/Day18.cs | 2 +- AOC2019/Day19.cs | 2 +- AOC2019/Day20.cs | 2 +- AOC2019/Day21.cs | 2 +- AOC2019/Day22.cs | 2 +- AOC2019/Day23.cs | 2 +- AOC2019/Day24.cs | 2 +- AOC2019/Day25.cs | 2 +- AOC2019/Program.cs | 22 ++++++--------- AOC2020/Day01.cs | 2 +- AOC2020/Day02.cs | 2 +- AOC2020/Day03.cs | 2 +- AOC2020/Day04.cs | 4 +-- AOC2020/Day05.cs | 2 +- AOC2020/Day06.cs | 2 +- AOC2020/Day07.cs | 2 +- AOC2020/Day08.cs | 2 +- AOC2020/Day09.cs | 2 +- AOC2020/Day10.cs | 4 +-- AOC2020/Day11.cs | 2 +- AOC2020/Day12.cs | 2 +- AOC2020/Day13.cs | 2 +- AOC2020/Day14.cs | 2 +- AOC2020/Day15.cs | 2 +- AOC2020/Day16.cs | 2 +- AOC2020/Day17.cs | 2 +- AOC2020/Day18.cs | 2 +- AOC2020/Day19.cs | 2 +- AOC2020/Day20.cs | 34 +++++++++++------------ AOC2020/Day21.cs | 2 +- AOC2020/Day22.cs | 6 ++--- AOC2020/Day23.cs | 2 +- AOC2020/Day24.cs | 4 +-- AOC2020/Day25.cs | 2 +- AOC2020/Program.cs | 6 ++--- AOC2021/Day01.cs | 2 +- AOC2021/Day02.cs | 2 +- AOC2021/Day03.cs | 2 +- AOC2021/Day04.cs | 2 +- AOC2021/Day05.cs | 2 +- AOC2021/Day06.cs | 2 +- AOC2021/Day07.cs | 2 +- AOC2021/Day08.cs | 2 +- AOC2021/Day09.cs | 2 +- AOC2021/Day10.cs | 2 +- AOC2021/Day11.cs | 2 +- AOC2021/Day12.cs | 2 +- AOC2021/Day13.cs | 2 +- AOC2021/Day14.cs | 2 +- AOC2021/Day15.cs | 2 +- AOC2021/Day16.cs | 2 +- AOC2021/Day17.cs | 2 +- AOC2021/Day18.cs | 2 +- AOC2021/Day19.cs | 2 +- AOC2021/Day20.cs | 2 +- AOC2021/Day21.cs | 2 +- AOC2021/Day22.cs | 2 +- AOC2021/Day23.cs | 2 +- AOC2021/Day24.cs | 2 +- AOC2021/Day25.cs | 2 +- AOC2021/Program.cs | 4 +-- AOC2022/AOC2022.csproj | 29 ++++++++++++++++++++ AOC2022/Day01.cs | 21 +++++++++++++++ AOC2022/Program.cs | 15 +++++++++++ AOC2022/input2022/day01.in | 0 AdventOfCode.sln | 6 +++++ 90 files changed, 234 insertions(+), 226 deletions(-) create mode 100644 AOC.Test/Common.cs create mode 100644 AOC.Test/Test2022.cs create mode 100644 AOC2022/AOC2022.csproj create mode 100644 AOC2022/Day01.cs create mode 100644 AOC2022/Program.cs create mode 100644 AOC2022/input2022/day01.in diff --git a/AOC.Common/Day.cs b/AOC.Common/Day.cs index 6749427..1cdbac2 100644 --- a/AOC.Common/Day.cs +++ b/AOC.Common/Day.cs @@ -2,16 +2,16 @@ public abstract class Day { - protected Day(int dayNumber, string puzzleName) + protected Day(int year, int day, string puzzleName) { - DayNumber = dayNumber; + Year = year; + DayNumber = day; PuzzleName = puzzleName; } public static bool UseTestInput { get; set; } - public static int Year { get; set; } - + public int Year { get; } public int DayNumber { get; } public string PuzzleName { get; } diff --git a/AOC.Test/AOC.Test.csproj b/AOC.Test/AOC.Test.csproj index e6cc8a2..488cd6c 100644 --- a/AOC.Test/AOC.Test.csproj +++ b/AOC.Test/AOC.Test.csproj @@ -25,6 +25,7 @@ + diff --git a/AOC.Test/Common.cs b/AOC.Test/Common.cs new file mode 100644 index 0000000..1bb28b5 --- /dev/null +++ b/AOC.Test/Common.cs @@ -0,0 +1,33 @@ +namespace AOC.Test; + +public static class Common +{ + public static void CheckDay(Type dayType, string part1, string part2) + { + 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"); + + // part 1 + s.Reset(); + s.Start(); + var part1Actual = day.Part1().ToString(); + s.Stop(); + Console.Write($"Part 1: {part1Actual,-25} "); + Console.WriteLine($"{s.ScaleMilliseconds()} ms elapsed"); + Assert.AreEqual(part1, part1Actual, $"Incorrect answer for Day {day.DayNumber} Part1"); + + // part 2 + s.Reset(); + s.Start(); + var part2Actual = day.Part2().ToString(); + s.Stop(); + Console.Write($"Part 2: {part2Actual,-25} "); + Console.WriteLine($"{s.ScaleMilliseconds()} ms elapsed"); + Assert.AreEqual(part2, part2Actual, $"Incorrect answer for Day {day.DayNumber} Part2"); + } +} \ No newline at end of file diff --git a/AOC.Test/Test2019.cs b/AOC.Test/Test2019.cs index 8158ba4..dc51131 100644 --- a/AOC.Test/Test2019.cs +++ b/AOC.Test/Test2019.cs @@ -35,32 +35,6 @@ public class Test2019 //[DataRow(typeof(Day25), "", "")] public void TestAllDays(Type dayType, string part1, string part2) { - Day.Year = 2019; - - 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)); - Console.Write($"Day {day.DayNumber,2}: {day.PuzzleName,-15} "); - Console.WriteLine($"{s.ScaleMilliseconds()} ms elapsed in constructor"); - - // part 1 - s.Reset(); - s.Start(); - var part1Actual = day.Part1(); - s.Stop(); - Console.Write($"Part 1: {part1Actual,-15} "); - Console.WriteLine($"{s.ScaleMilliseconds()} ms elapsed"); - Assert.AreEqual(part1, part1Actual, $"Incorrect answer for Day {day.DayNumber} Part1"); - - // part 2 - s.Reset(); - s.Start(); - var part2Actual = day.Part2(); - s.Stop(); - Console.Write($"Part 2: {part2Actual,-15} "); - Console.WriteLine($"{s.ScaleMilliseconds()} ms elapsed"); - Assert.AreEqual(part2, part2Actual, $"Incorrect answer for Day {day.DayNumber} Part2"); + Common.CheckDay(dayType, part1, part2); } } \ No newline at end of file diff --git a/AOC.Test/Test2020.cs b/AOC.Test/Test2020.cs index 562d5fd..96d96c2 100644 --- a/AOC.Test/Test2020.cs +++ b/AOC.Test/Test2020.cs @@ -33,29 +33,6 @@ public class Test2020 [DataRow(typeof(Day25), "11707042", "")] public void CheckAllDays(Type dayType, string part1, string part2) { - Day.Year = 2020; - - // create day instance - var s = Stopwatch.StartNew(); - var day = Activator.CreateInstance(dayType) as Day; - s.Stop(); - Assert.IsNotNull(day, "failed to create day object"); - Console.WriteLine($"{s.ScaleMilliseconds()}ms elapsed in constructor"); - - // part 1 - s.Reset(); - s.Start(); - var part1Actual = day!.Part1(); - s.Stop(); - Console.WriteLine($"{s.ScaleMilliseconds()}ms elapsed in part1"); - Assert.AreEqual(part1, part1Actual, $"Incorrect answer for Day {day.DayNumber} Part1"); - - // part 2 - s.Reset(); - s.Start(); - var part2Actual = day.Part2(); - s.Stop(); - Console.WriteLine($"{s.ScaleMilliseconds()}ms elapsed in part2"); - Assert.AreEqual(part2, part2Actual, $"Incorrect answer for Day {day.DayNumber} Part2"); + Common.CheckDay(dayType, part1, part2); } } \ No newline at end of file diff --git a/AOC.Test/Test2021.cs b/AOC.Test/Test2021.cs index ec9f390..c239d06 100644 --- a/AOC.Test/Test2021.cs +++ b/AOC.Test/Test2021.cs @@ -50,33 +50,7 @@ public class Test2021 [DataRow(typeof(Day25), "417", "")] public void CheckAllDays(Type dayType, string part1, string part2) { - Day.Year = 2021; - - 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)); - Console.Write($"Day {day.DayNumber,2}: {day.PuzzleName,-25} "); - Console.WriteLine($"{s.ScaleMilliseconds()} ms elapsed in constructor"); - - // part 1 - s.Reset(); - s.Start(); - var part1Actual = day.Part1().ToString(); - s.Stop(); - Console.Write($"Part 1: {part1Actual,-25} "); - Console.WriteLine($"{s.ScaleMilliseconds()} ms elapsed"); - Assert.AreEqual(part1, part1Actual, $"Incorrect answer for Day {day.DayNumber} Part1"); - - // part 2 - s.Reset(); - s.Start(); - var part2Actual = day.Part2().ToString(); - s.Stop(); - Console.Write($"Part 2: {part2Actual,-25} "); - Console.WriteLine($"{s.ScaleMilliseconds()} ms elapsed"); - Assert.AreEqual(part2, part2Actual, $"Incorrect answer for Day {day.DayNumber} Part2"); + Common.CheckDay(dayType, part1, part2); } [DataTestMethod] @@ -106,33 +80,8 @@ public class Test2021 [DataRow(typeof(Day25), "58", "")] public void CheckTestInputs(Type dayType, string part1, string part2) { - Day.Year = 2021; Day.UseTestInput = true; - 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)); - Console.Write($"Day {day.DayNumber,2}: {day.PuzzleName,-25} "); - Console.WriteLine($"{s.ScaleMilliseconds()} ms elapsed in constructor"); - - // part 1 - s.Reset(); - s.Start(); - var part1Actual = day.Part1().ToString(); - s.Stop(); - Console.Write($"Part 1: {part1Actual,-25} "); - Console.WriteLine($"{s.ScaleMilliseconds()} ms elapsed"); - Assert.AreEqual(part1, part1Actual, $"Incorrect answer for Day {day.DayNumber} Part1"); - - // part 2 - s.Reset(); - s.Start(); - var part2Actual = day.Part2().ToString(); - s.Stop(); - Console.Write($"Part 2: {part2Actual,-25} "); - Console.WriteLine($"{s.ScaleMilliseconds()} ms elapsed"); - Assert.AreEqual(part2, part2Actual, $"Incorrect answer for Day {day.DayNumber} Part2"); + Common.CheckDay(dayType, part1, part2); } } \ No newline at end of file diff --git a/AOC.Test/Test2022.cs b/AOC.Test/Test2022.cs new file mode 100644 index 0000000..d157fab --- /dev/null +++ b/AOC.Test/Test2022.cs @@ -0,0 +1,13 @@ +using AOC2022; +namespace AOC.Test; + +[TestClass] +public class Test2022 +{ + [DataTestMethod] + [DataRow(typeof(Day01), "", "")] + public void CheckAllDays(Type dayType, string part1, string part2) + { + Common.CheckDay(dayType, part1, part2); + } +} \ No newline at end of file diff --git a/AOC2019/Day01.cs b/AOC2019/Day01.cs index 3c94362..da8b837 100644 --- a/AOC2019/Day01.cs +++ b/AOC2019/Day01.cs @@ -4,7 +4,7 @@ public sealed class Day01 : Day { private readonly IEnumerable _masses; - public Day01() : base(1, "The Tyranny of the Rocket Equation") + public Day01() : base(2019, 1, "The Tyranny of the Rocket Equation") { _masses = Input.Select(int.Parse); } diff --git a/AOC2019/Day02.cs b/AOC2019/Day02.cs index 3cef2e6..2160f6e 100644 --- a/AOC2019/Day02.cs +++ b/AOC2019/Day02.cs @@ -4,7 +4,7 @@ public sealed class Day02 : Day { private readonly IEnumerable _input; - public Day02() : base(2, "1202 Program Alarm") + public Day02() : base(2019, 2, "1202 Program Alarm") { _input = Input.First().Split(',').Select(int.Parse); } diff --git a/AOC2019/Day03.cs b/AOC2019/Day03.cs index e98e07d..09f6d48 100644 --- a/AOC2019/Day03.cs +++ b/AOC2019/Day03.cs @@ -5,7 +5,7 @@ public sealed class Day03 : Day private readonly IEnumerable<(int, int)> _intersections; private readonly List> _wires; - public Day03() : base(3, "Crossed Wires") + public Day03() : base(2019, 3, "Crossed Wires") { _wires = Input.Select(ParseWire).ToList(); _intersections = _wires[0].Keys.Intersect(_wires[1].Keys); diff --git a/AOC2019/Day04.cs b/AOC2019/Day04.cs index 581ed62..eef9af2 100644 --- a/AOC2019/Day04.cs +++ b/AOC2019/Day04.cs @@ -4,7 +4,7 @@ public sealed class Day04 : Day { private readonly int _start, _end; - public Day04() : base(4, "Secure Container") + public Day04() : base(2019, 4, "Secure Container") { var range = Input.First().Split('-').Select(int.Parse).ToList(); _start = range[0]; diff --git a/AOC2019/Day05.cs b/AOC2019/Day05.cs index 9e58126..2d4c986 100644 --- a/AOC2019/Day05.cs +++ b/AOC2019/Day05.cs @@ -5,7 +5,7 @@ public sealed class Day05 : Day private readonly IEnumerable _tape; private int _output; - public Day05() : base(5, "Sunny with a Chance of Asteroids") + public Day05() : base(2019, 5, "Sunny with a Chance of Asteroids") { _tape = Input.First().Split(',').Select(int.Parse); } diff --git a/AOC2019/Day06.cs b/AOC2019/Day06.cs index e9b5522..3ee45f1 100644 --- a/AOC2019/Day06.cs +++ b/AOC2019/Day06.cs @@ -4,7 +4,7 @@ public sealed class Day06 : Day { private readonly Dictionary _input; - public Day06() : base(6, "Universal Orbit Map") + public Day06() : base(2019, 6, "Universal Orbit Map") { _input = Input.ToDictionary(i => i.Split(')')[1], i => i.Split(')')[0]); } diff --git a/AOC2019/Day07.cs b/AOC2019/Day07.cs index 8305cb0..20e0b26 100644 --- a/AOC2019/Day07.cs +++ b/AOC2019/Day07.cs @@ -4,7 +4,7 @@ public sealed class Day07 : Day { private readonly IntCodeVM[] _amplifiers = new IntCodeVM[5]; - public Day07() : base(7, "Amplification Circuit") + public Day07() : base(2019, 7, "Amplification Circuit") { for (var i = 0; i < 5; i++) _amplifiers[i] = new(Input.First()); } diff --git a/AOC2019/Day08.cs b/AOC2019/Day08.cs index 4b2ff19..ab0736f 100644 --- a/AOC2019/Day08.cs +++ b/AOC2019/Day08.cs @@ -4,7 +4,7 @@ public sealed class Day08 : Day { private readonly List> _photo; - public Day08() : base(8, "Space Image Format") + public Day08() : base(2019, 8, "Space Image Format") { _photo = Input.First().Chunk(25 * 6).Select(s => s.ToList()).ToList(); } diff --git a/AOC2019/Day09.cs b/AOC2019/Day09.cs index 447e167..6f47480 100644 --- a/AOC2019/Day09.cs +++ b/AOC2019/Day09.cs @@ -4,7 +4,7 @@ public sealed class Day09 : Day { private readonly IntCodeVM _vm; - public Day09() : base(9, "Sensor Boost") + public Day09() : base(2019, 9, "Sensor Boost") { _vm = new(Input.First()); } diff --git a/AOC2019/Day10.cs b/AOC2019/Day10.cs index 1d2c299..ce34c77 100644 --- a/AOC2019/Day10.cs +++ b/AOC2019/Day10.cs @@ -6,7 +6,7 @@ public sealed class Day10 : Day private (int x, int y) _best = (x: -1, y: -1); private int _bestCanSee; - public Day10() : base(10, "Monitoring Station") + public Day10() : base(2019, 10, "Monitoring Station") { _asteroids = Input .Select((r, y) => r.Select((c, x) => (x, y, isAsteroid: c == '#')).ToArray()) diff --git a/AOC2019/Day11.cs b/AOC2019/Day11.cs index 9d22c7a..4f0fdac 100644 --- a/AOC2019/Day11.cs +++ b/AOC2019/Day11.cs @@ -6,7 +6,7 @@ public sealed class Day11 : Day private Direction _heading; private long _x, _y; - public Day11() : base(11, "Space Police") + public Day11() : base(2019, 11, "Space Police") { _vm = new(Input.First()); } @@ -58,7 +58,7 @@ public sealed class Day11 : Day var haltType = IntCodeVM.HaltType.Waiting; while (haltType == IntCodeVM.HaltType.Waiting) { - haltType = _vm.Run(map.GetValueOrDefault((x: _x, y: _y))); + haltType = _vm.Run(map.GetValueOrDefault((_x, _y))); map[(_x, _y)] = _vm.Result; Turn(_vm.Result); } diff --git a/AOC2019/Day12.cs b/AOC2019/Day12.cs index 09fd279..f287195 100644 --- a/AOC2019/Day12.cs +++ b/AOC2019/Day12.cs @@ -5,7 +5,7 @@ public sealed class Day12 : Day private readonly List _moons; private int _step; - public Day12() : base(12, "The N-Body Problem") + public Day12() : base(2019, 12, "The N-Body Problem") { _moons = Input .Select(moon => diff --git a/AOC2019/Day13.cs b/AOC2019/Day13.cs index 0ebc858..554db1b 100644 --- a/AOC2019/Day13.cs +++ b/AOC2019/Day13.cs @@ -5,7 +5,7 @@ public sealed class Day13 : Day private readonly Dictionary<(int x, int y), int> _board; private readonly IntCodeVM _vm; - public Day13() : base(13, "Care Package") + public Day13() : base(2019, 13, "Care Package") { _vm = new(Input.First()); _board = new Dictionary<(int, int), int>(); diff --git a/AOC2019/Day14.cs b/AOC2019/Day14.cs index e26f663..5c1979a 100644 --- a/AOC2019/Day14.cs +++ b/AOC2019/Day14.cs @@ -6,7 +6,7 @@ public sealed class Day14 : Day private Dictionary _available; - public Day14() : base(14, "Space Stoichiometry") + public Day14() : base(2019, 14, "Space Stoichiometry") { _reactions = Input .Select(Reaction.Parse) diff --git a/AOC2019/Day15.cs b/AOC2019/Day15.cs index a29a933..1639de7 100644 --- a/AOC2019/Day15.cs +++ b/AOC2019/Day15.cs @@ -5,7 +5,7 @@ public sealed class Day15 : Day private readonly bool _verbose = false; private readonly IntCodeVM _vm; - public Day15() : base(15, "Oxygen System") + public Day15() : base(2019, 15, "Oxygen System") { _vm = new(Input.First()); } diff --git a/AOC2019/Day16.cs b/AOC2019/Day16.cs index 3bf3ea9..7484be5 100644 --- a/AOC2019/Day16.cs +++ b/AOC2019/Day16.cs @@ -5,7 +5,7 @@ public sealed class Day16 : Day private static readonly int[] BasePattern = { 0, 1, 0, -1 }; private readonly int[] _initialList; - public Day16() : base(16, "Flawed Frequency Transmission") + public Day16() : base(2019, 16, "Flawed Frequency Transmission") { _initialList = Input.First().Select(c => int.Parse($"{c}")).ToArray(); } diff --git a/AOC2019/Day17.cs b/AOC2019/Day17.cs index 60e1c63..532222c 100644 --- a/AOC2019/Day17.cs +++ b/AOC2019/Day17.cs @@ -4,7 +4,7 @@ public sealed class Day17 : Day { private readonly IntCodeVM _vm; - public Day17() : base(17, "Set and Forget") + public Day17() : base(2019, 17, "Set and Forget") { _vm = new(Input.First()); } diff --git a/AOC2019/Day18.cs b/AOC2019/Day18.cs index 51e0b92..699c11e 100644 --- a/AOC2019/Day18.cs +++ b/AOC2019/Day18.cs @@ -2,7 +2,7 @@ public sealed class Day18 : Day { - public Day18() : base(18, "Many-Worlds Interpretation") + public Day18() : base(2019, 18, "Many-Worlds Interpretation") { } diff --git a/AOC2019/Day19.cs b/AOC2019/Day19.cs index 445c3bb..14889ac 100644 --- a/AOC2019/Day19.cs +++ b/AOC2019/Day19.cs @@ -5,7 +5,7 @@ public sealed class Day19 : Day private readonly long[,] _grid; private readonly IntCodeVM _vm; - public Day19() : base(19, "Tractor Beam") + public Day19() : base(2019, 19, "Tractor Beam") { _vm = new(Input.First()); _grid = new long[50, 50]; diff --git a/AOC2019/Day20.cs b/AOC2019/Day20.cs index dd1a494..43a58bd 100644 --- a/AOC2019/Day20.cs +++ b/AOC2019/Day20.cs @@ -2,7 +2,7 @@ public sealed class Day20 : Day { - public Day20() : base(20, "Donut Maze") + public Day20() : base(2019, 20, "Donut Maze") { } diff --git a/AOC2019/Day21.cs b/AOC2019/Day21.cs index f19a843..bc4033c 100644 --- a/AOC2019/Day21.cs +++ b/AOC2019/Day21.cs @@ -4,7 +4,7 @@ public sealed class Day21 : Day { private readonly IntCodeVM _vm; - public Day21() : base(21, "Springdroid Adventure") + public Day21() : base(2019, 21, "Springdroid Adventure") { _vm = new(Input.First()); } diff --git a/AOC2019/Day22.cs b/AOC2019/Day22.cs index 660f19a..d467ebc 100644 --- a/AOC2019/Day22.cs +++ b/AOC2019/Day22.cs @@ -2,7 +2,7 @@ public sealed class Day22 : Day { - public Day22() : base(22, "Slam Shuffle") + public Day22() : base(2019, 22, "Slam Shuffle") { } diff --git a/AOC2019/Day23.cs b/AOC2019/Day23.cs index e9c2846..7791545 100644 --- a/AOC2019/Day23.cs +++ b/AOC2019/Day23.cs @@ -2,7 +2,7 @@ namespace AOC2019; public sealed class Day23 : Day { - public Day23() : base(23, "Category Six") + public Day23() : base(2019, 23, "Category Six") { } diff --git a/AOC2019/Day24.cs b/AOC2019/Day24.cs index 02b78d7..d6c3068 100644 --- a/AOC2019/Day24.cs +++ b/AOC2019/Day24.cs @@ -2,7 +2,7 @@ public sealed class Day24 : Day { - public Day24() : base(24, "Planet of Discord") + public Day24() : base(2019, 24, "Planet of Discord") { } diff --git a/AOC2019/Day25.cs b/AOC2019/Day25.cs index f023026..09d3171 100644 --- a/AOC2019/Day25.cs +++ b/AOC2019/Day25.cs @@ -2,7 +2,7 @@ public sealed class Day25 : Day { - public Day25() : base(25, "Cryostasis") + public Day25() : base(2019, 25, "Cryostasis") { } diff --git a/AOC2019/Program.cs b/AOC2019/Program.cs index 530d974..acdeb6a 100644 --- a/AOC2019/Program.cs +++ b/AOC2019/Program.cs @@ -1,21 +1,15 @@ -Day.Year = 2019; - -var days = - Assembly.GetExecutingAssembly().GetTypes() - .Where(t => t.BaseType == typeof(Day)) - .Select(t => Activator.CreateInstance(t) as Day) - .OrderBy(d => d?.DayNumber); +var days = Assembly.GetExecutingAssembly().GetTypes() + .Where(t => t.BaseType == typeof(Day)) + .Select(t => (Activator.CreateInstance(t) as Day)!) + .OrderBy(d => d.DayNumber); if (args.Length == 1 && int.TryParse(args[0], out var dayNum)) { - var day = days.FirstOrDefault(d => d?.DayNumber == dayNum); - - if (day != null) - day.AllParts(); - else - Console.WriteLine($"{dayNum} invalid or not yet implemented"); + var day = days.FirstOrDefault(d => d.DayNumber == dayNum); + if (day != null) day.AllParts(); + else Console.WriteLine($"Day {dayNum} invalid or not yet implemented"); } else { - foreach (var d in days) d?.AllParts(); + foreach (var d in days) d.AllParts(); } \ No newline at end of file diff --git a/AOC2020/Day01.cs b/AOC2020/Day01.cs index 9d7472c..d11554b 100644 --- a/AOC2020/Day01.cs +++ b/AOC2020/Day01.cs @@ -7,7 +7,7 @@ public sealed class Day01 : Day { private readonly ImmutableHashSet _entries; - public Day01() : base(1, "Report Repair") => + public Day01() : base(2020, 1, "Report Repair") => _entries = Input.Select(int.Parse).ToImmutableHashSet(); public override string Part1() diff --git a/AOC2020/Day02.cs b/AOC2020/Day02.cs index 37d0fa4..fd9b5ee 100644 --- a/AOC2020/Day02.cs +++ b/AOC2020/Day02.cs @@ -7,7 +7,7 @@ public sealed class Day02 : Day { private readonly ImmutableList _passwords; - public Day02() : base(2, "Password Philosophy") => + public Day02() : base(2020, 2, "Password Philosophy") => _passwords = Input.Select(p => new Password(p)).ToImmutableList(); public override string Part1() => diff --git a/AOC2020/Day03.cs b/AOC2020/Day03.cs index 28062c0..4c646b1 100644 --- a/AOC2020/Day03.cs +++ b/AOC2020/Day03.cs @@ -8,7 +8,7 @@ public sealed class Day03 : Day private readonly string[] _grid; private readonly int _width; - public Day03() : base(3, "Toboggan Trajectory") + public Day03() : base(2020, 3, "Toboggan Trajectory") { _grid = Input.ToArray(); _width = _grid[0].Length; diff --git a/AOC2020/Day04.cs b/AOC2020/Day04.cs index 5a6db00..b3082e8 100644 --- a/AOC2020/Day04.cs +++ b/AOC2020/Day04.cs @@ -7,9 +7,9 @@ public sealed class Day04 : Day { private readonly List _passports; - public Day04() : base(4, "Passport Processing") + public Day04() : base(2020, 4, "Passport Processing") { - _passports = new List(); + _passports = new(); var a = new List(); foreach (var line in Input) diff --git a/AOC2020/Day05.cs b/AOC2020/Day05.cs index bc3a2d0..88964ee 100644 --- a/AOC2020/Day05.cs +++ b/AOC2020/Day05.cs @@ -7,7 +7,7 @@ public sealed class Day05 : Day { private readonly ImmutableHashSet _ids; - public Day05() : base(5, "Binary Boarding") => + public Day05() : base(2020, 5, "Binary Boarding") => _ids = Input .Select(s => Convert.ToInt32(s.Replace('F', '0').Replace('B', '1').Replace('L', '0').Replace('R', '1'), 2)) diff --git a/AOC2020/Day06.cs b/AOC2020/Day06.cs index 6d47151..06e8a4f 100644 --- a/AOC2020/Day06.cs +++ b/AOC2020/Day06.cs @@ -8,7 +8,7 @@ public sealed class Day06 : Day private readonly int _countPart1; private readonly int _countPart2; - public Day06() : base(6, "Custom Customs") + public Day06() : base(2020, 6, "Custom Customs") { var alphabet = "abcedfghijklmnopqrstuvwxyz".ToCharArray(); _countPart1 = 0; diff --git a/AOC2020/Day07.cs b/AOC2020/Day07.cs index 2a1bc81..7f06eff 100644 --- a/AOC2020/Day07.cs +++ b/AOC2020/Day07.cs @@ -7,7 +7,7 @@ public sealed class Day07 : Day { private readonly Dictionary> _rules; - public Day07() : base(7, "Handy Haversacks") => + public Day07() : base(2020, 7, "Handy Haversacks") => _rules = Input .Select(rule => { diff --git a/AOC2020/Day08.cs b/AOC2020/Day08.cs index 2d8e8fd..d9486c2 100644 --- a/AOC2020/Day08.cs +++ b/AOC2020/Day08.cs @@ -9,7 +9,7 @@ public sealed class Day08 : Day private int _accumulator; private int _currentInstruction; - public Day08() : base(8, "Handheld Halting") => + public Day08() : base(2020, 8, "Handheld Halting") => _instructions = Input.Select(ParseLine).ToArray(); private static (string, int) ParseLine(string line) diff --git a/AOC2020/Day09.cs b/AOC2020/Day09.cs index 5300908..2d2e011 100644 --- a/AOC2020/Day09.cs +++ b/AOC2020/Day09.cs @@ -8,7 +8,7 @@ public sealed class Day09 : Day private readonly long[] _list; private long _part1; - public Day09() : base(9, "Encoding Error") => + public Day09() : base(2020, 9, "Encoding Error") => _list = Input.Select(long.Parse).ToArray(); public override string Part1() diff --git a/AOC2020/Day10.cs b/AOC2020/Day10.cs index 3a5f38e..1710285 100644 --- a/AOC2020/Day10.cs +++ b/AOC2020/Day10.cs @@ -8,7 +8,7 @@ public sealed class Day10 : Day private readonly int[] _adapters; private readonly long[] _memo; - public Day10() : base(10, "Adapter Array") + public Day10() : base(2020, 10, "Adapter Array") { var parsed = Input.Select(int.Parse).ToArray(); // add socket and device to the list @@ -42,7 +42,7 @@ public sealed class Day10 : Day case 3: threes++; break; - default: throw new Exception("something went wrong"); + default: throw new("something went wrong"); } return $"{ones * threes}"; diff --git a/AOC2020/Day11.cs b/AOC2020/Day11.cs index b829c69..0533bf2 100644 --- a/AOC2020/Day11.cs +++ b/AOC2020/Day11.cs @@ -5,7 +5,7 @@ namespace AOC2020; /// public sealed class Day11 : Day { - public Day11() : base(11, "Seating System") + public Day11() : base(2020, 11, "Seating System") { } diff --git a/AOC2020/Day12.cs b/AOC2020/Day12.cs index 73a189a..728e359 100644 --- a/AOC2020/Day12.cs +++ b/AOC2020/Day12.cs @@ -5,7 +5,7 @@ namespace AOC2020; /// public sealed class Day12 : Day { - public Day12() : base(12, "Rain Risk") + public Day12() : base(2020, 12, "Rain Risk") { } diff --git a/AOC2020/Day13.cs b/AOC2020/Day13.cs index 2043846..1c4072b 100644 --- a/AOC2020/Day13.cs +++ b/AOC2020/Day13.cs @@ -9,7 +9,7 @@ public sealed class Day13 : Day private readonly long _earliest; private readonly string[] _fullSchedule; - public Day13() : base(13, "Shuttle Search") + public Day13() : base(2020, 13, "Shuttle Search") { _earliest = long.Parse(Input.First()); _fullSchedule = Input.Last().Split(','); diff --git a/AOC2020/Day14.cs b/AOC2020/Day14.cs index 81dc1b5..77853bd 100644 --- a/AOC2020/Day14.cs +++ b/AOC2020/Day14.cs @@ -5,7 +5,7 @@ namespace AOC2020; /// public sealed class Day14 : Day { - public Day14() : base(14, "Docking Data") + public Day14() : base(2020, 14, "Docking Data") { } diff --git a/AOC2020/Day15.cs b/AOC2020/Day15.cs index 2743c86..d199692 100644 --- a/AOC2020/Day15.cs +++ b/AOC2020/Day15.cs @@ -9,7 +9,7 @@ public sealed class Day15 : Day private int _current; private int _i; - public Day15() : base(15, "Rambunctious Recitation") + public Day15() : base(2020, 15, "Rambunctious Recitation") { var initial = Input.First().Split(',').Select(int.Parse).ToArray(); _turns = new int[30_000_000]; diff --git a/AOC2020/Day16.cs b/AOC2020/Day16.cs index 871ce4c..d8cf2af 100644 --- a/AOC2020/Day16.cs +++ b/AOC2020/Day16.cs @@ -8,7 +8,7 @@ public sealed class Day16 : Day private readonly Dictionary> _rules; private readonly List> _tickets; - public Day16() : base(16, "Ticket Translation") + public Day16() : base(2020, 16, "Ticket Translation") { _tickets = new(); _rules = new(); diff --git a/AOC2020/Day17.cs b/AOC2020/Day17.cs index cf69117..d25a034 100644 --- a/AOC2020/Day17.cs +++ b/AOC2020/Day17.cs @@ -9,7 +9,7 @@ public sealed class Day17 : Day private readonly Dictionary<(int x, int y, int z, int w), char> _plane4 = new(); - public Day17() : base(17, "Conway Cubes") + public Day17() : base(2020, 17, "Conway Cubes") { var input = Input.ToList(); diff --git a/AOC2020/Day18.cs b/AOC2020/Day18.cs index f6adbeb..2beb50d 100644 --- a/AOC2020/Day18.cs +++ b/AOC2020/Day18.cs @@ -7,7 +7,7 @@ public sealed class Day18 : Day { private readonly List _expressions; - public Day18() : base(18, "Operation Order") => + public Day18() : base(2020, 18, "Operation Order") => _expressions = Input.Select(line => line.Replace(" ", "")).ToList(); private static long Calculate(string expr, Func precedence) diff --git a/AOC2020/Day19.cs b/AOC2020/Day19.cs index 175ce80..dd929a2 100644 --- a/AOC2020/Day19.cs +++ b/AOC2020/Day19.cs @@ -9,7 +9,7 @@ public sealed class Day19 : Day private readonly Dictionary _rules; private readonly Stack _stack; - public Day19() : base(19, "Monster Messages") + public Day19() : base(2020, 19, "Monster Messages") { _rules = Input.TakeWhile(l => !string.IsNullOrWhiteSpace(l)) .Select(l => l.Split(':')) diff --git a/AOC2020/Day20.cs b/AOC2020/Day20.cs index 1e1fae1..293f18c 100644 --- a/AOC2020/Day20.cs +++ b/AOC2020/Day20.cs @@ -5,7 +5,7 @@ namespace AOC2020; /// public sealed class Day20 : Day { - public Day20() : base(20, "Jurassic Jigsaw") + public Day20() : base(2020, 20, "Jurassic Jigsaw") { } @@ -53,8 +53,8 @@ public sealed class Day20 : Day void AddConnection(PuzzlePiece p1, PuzzlePiece p2) { - if (!connections.ContainsKey(p1)) connections.Add(p1, new List()); - if (!connections.ContainsKey(p2)) connections.Add(p2, new List()); + if (!connections.ContainsKey(p1)) connections.Add(p1, new()); + if (!connections.ContainsKey(p2)) connections.Add(p2, new()); connections[p1].Add(p2); connections[p2].Add(p1); } @@ -195,7 +195,7 @@ public sealed class Day20 : Day { var id = long.Parse(pieceWithId[0][5..^1]); var piece = pieceWithId[1..].Select(x => x.ToCharArray()).ToArray(); - return new PuzzlePiece(id, piece); + return new(id, piece); } private PuzzlePiece(long id, char[][] piece) @@ -203,14 +203,14 @@ public sealed class Day20 : Day Id = id; _piece = piece; - _topSide = new Lazy(() => new string(piece[0])); - RightSide = new Lazy(() => new string(piece.Select(line => line[^1]).ToArray())); - BottomSide = new Lazy(() => new string(piece[^1].Reverse().ToArray())); - _leftSide = new Lazy(() => new string(piece.Select(line => line[0]).Reverse().ToArray())); - Sides = new Lazy(() => new[] + _topSide = new(() => new(piece[0])); + RightSide = new(() => new(piece.Select(line => line[^1]).ToArray())); + BottomSide = new(() => new(piece[^1].Reverse().ToArray())); + _leftSide = new(() => new(piece.Select(line => line[0]).Reverse().ToArray())); + Sides = new(() => new[] { _topSide.Value, RightSide.Value, BottomSide.Value, _leftSide.Value }); - SidesWithFlippedPaired = new Lazy<(string, string)[]>(() => CalculateSidesWithFlipped(this)); - AllSidesWithFlipped = new Lazy>(() => CalculateAllSidesWithFlipped(this)); + SidesWithFlippedPaired = new(() => CalculateSidesWithFlipped(this)); + AllSidesWithFlipped = new(() => CalculateAllSidesWithFlipped(this)); } public override bool Equals(object? obj) => obj is PuzzlePiece piece && Id == piece.Id; @@ -218,10 +218,10 @@ public sealed class Day20 : Day public override string ToString() => Id.ToString(); public PuzzlePiece TransformSoTopMatchesWith(string sideToMatch) => - TransformSoSideMatchesWith(new string(sideToMatch.Reverse().ToArray()), p => p._topSide.Value); + TransformSoSideMatchesWith(new(sideToMatch.Reverse().ToArray()), p => p._topSide.Value); public PuzzlePiece TransformSoLeftMatchesWith(string sideToMatch) => - TransformSoSideMatchesWith(new string(sideToMatch.Reverse().ToArray()), p => p._leftSide.Value); + TransformSoSideMatchesWith(new(sideToMatch.Reverse().ToArray()), p => p._leftSide.Value); private PuzzlePiece TransformSoSideMatchesWith(string sideToMatch, Func getSide) { @@ -246,10 +246,10 @@ public sealed class Day20 : Day private static (string, string)[] CalculateSidesWithFlipped(PuzzlePiece piece) => new (string, string)[] { - (piece._topSide.Value, new string(piece._topSide.Value.Reverse().ToArray())), - (piece.RightSide.Value, new string(piece.RightSide.Value.Reverse().ToArray())), - (piece.BottomSide.Value, new string(piece.BottomSide.Value.Reverse().ToArray())), - (piece._leftSide.Value, new string(piece._leftSide.Value.Reverse().ToArray())), + (piece._topSide.Value, new(piece._topSide.Value.Reverse().ToArray())), + (piece.RightSide.Value, new(piece.RightSide.Value.Reverse().ToArray())), + (piece.BottomSide.Value, new(piece.BottomSide.Value.Reverse().ToArray())), + (piece._leftSide.Value, new(piece._leftSide.Value.Reverse().ToArray())), }; private static HashSet CalculateAllSidesWithFlipped(PuzzlePiece piece) => diff --git a/AOC2020/Day21.cs b/AOC2020/Day21.cs index 77b0150..738cf99 100644 --- a/AOC2020/Day21.cs +++ b/AOC2020/Day21.cs @@ -8,7 +8,7 @@ public sealed class Day21 : Day private readonly IEnumerable<(string[] Allergens, string[] Ingredients)> _parsedFoods; private readonly IEnumerable<(string Allergen, string Ingredient)> _dangerousFoods; - public Day21() : base(21, "Allergen Assessment") + public Day21() : base(2020, 21, "Allergen Assessment") { _parsedFoods = Input.Select(line => line.TrimEnd(')').Split(" (contains ")) .Select(split => (Allergens: split[1].Split(", "), Ingredients: split[0].Split(' '))); diff --git a/AOC2020/Day22.cs b/AOC2020/Day22.cs index 765108d..a1c7c9f 100644 --- a/AOC2020/Day22.cs +++ b/AOC2020/Day22.cs @@ -8,7 +8,7 @@ public sealed class Day22 : Day private readonly Queue _deck1 = new(); private readonly Queue _deck2 = new(); - public Day22() : base(22, "Crab Combat") + public Day22() : base(2020, 22, "Crab Combat") { Reset(); } @@ -47,7 +47,7 @@ public sealed class Day22 : Day if (seen1.Contains(deck1Hash) || seen2.Contains(deck2Hash)) { // player1 wins - return (deck1, new Queue()); + return (deck1, new()); } else { @@ -85,7 +85,7 @@ public sealed class Day22 : Day } private (Queue deck1, Queue deck2) Play(IEnumerable enumerable1, IEnumerable enumerable2, bool recursive) => - Play(new Queue(enumerable1), new Queue(enumerable2), recursive); + Play(new(enumerable1), new(enumerable2), recursive); private static int CalculateScore(Queue deck) => deck.Reverse().Zip(Enumerable.Range(1, deck.Count), (a, b) => a * b).Sum(); diff --git a/AOC2020/Day23.cs b/AOC2020/Day23.cs index 0b1ed76..79a34c7 100644 --- a/AOC2020/Day23.cs +++ b/AOC2020/Day23.cs @@ -10,7 +10,7 @@ public sealed class Day23 : Day private readonly long[] _move; private long _current; - public Day23() : base(23, "Crab Cups") + public Day23() : base(2020, 23, "Crab Cups") { _initialCups = Input.First().Select(c => long.Parse(c.ToString())).ToImmutableList(); _current = _initialCups.First(); diff --git a/AOC2020/Day24.cs b/AOC2020/Day24.cs index 0652480..3e19871 100644 --- a/AOC2020/Day24.cs +++ b/AOC2020/Day24.cs @@ -17,7 +17,7 @@ public sealed class Day24 : Day private Dictionary<(int q, int r, int s), Tile> _tiles; - public Day24() : base(24, "Lobby Layout") + public Day24() : base(2020, 24, "Lobby Layout") { _tiles = Input .Select(Tile.FromLine) @@ -72,7 +72,7 @@ public sealed class Day24 : Day direction = ""; } - return new Tile { Location = location }; + return new() { Location = location }; } public static Tile operator +(Tile t, (int q, int r, int s) direction) => diff --git a/AOC2020/Day25.cs b/AOC2020/Day25.cs index 24bedd2..3755fd9 100644 --- a/AOC2020/Day25.cs +++ b/AOC2020/Day25.cs @@ -5,7 +5,7 @@ namespace AOC2020; /// public sealed class Day25 : Day { - public Day25() : base(25, "Combo Breaker") + public Day25() : base(2020, 25, "Combo Breaker") { } diff --git a/AOC2020/Program.cs b/AOC2020/Program.cs index 2b69b35..acdeb6a 100644 --- a/AOC2020/Program.cs +++ b/AOC2020/Program.cs @@ -1,6 +1,4 @@ -Day.Year = 2020; - -var days = Assembly.GetExecutingAssembly().GetTypes() +var days = Assembly.GetExecutingAssembly().GetTypes() .Where(t => t.BaseType == typeof(Day)) .Select(t => (Activator.CreateInstance(t) as Day)!) .OrderBy(d => d.DayNumber); @@ -14,4 +12,4 @@ if (args.Length == 1 && int.TryParse(args[0], out var dayNum)) else { foreach (var d in days) d.AllParts(); -} +} \ No newline at end of file diff --git a/AOC2021/Day01.cs b/AOC2021/Day01.cs index 2eb459e..11582f7 100644 --- a/AOC2021/Day01.cs +++ b/AOC2021/Day01.cs @@ -7,7 +7,7 @@ public sealed class Day01 : Day { private readonly List _readings; - public Day01() : base(1, "Sonar Sweep") + public Day01() : base(2021, 1, "Sonar Sweep") { _readings = Input.Select(int.Parse).ToList(); } diff --git a/AOC2021/Day02.cs b/AOC2021/Day02.cs index 58df06b..f3ead38 100644 --- a/AOC2021/Day02.cs +++ b/AOC2021/Day02.cs @@ -5,7 +5,7 @@ /// public sealed class Day02 : Day { - public Day02() : base(2, "Dive!") + public Day02() : base(2021, 2, "Dive!") { } diff --git a/AOC2021/Day03.cs b/AOC2021/Day03.cs index 2c7b53a..c978607 100644 --- a/AOC2021/Day03.cs +++ b/AOC2021/Day03.cs @@ -7,7 +7,7 @@ public sealed class Day03 : Day { private readonly List _report; - public Day03() : base(3, "Binary Diagnostic") + public Day03() : base(2021, 3, "Binary Diagnostic") { _report = Input.ToList(); } diff --git a/AOC2021/Day04.cs b/AOC2021/Day04.cs index 29c75d3..ef151cc 100644 --- a/AOC2021/Day04.cs +++ b/AOC2021/Day04.cs @@ -9,7 +9,7 @@ public sealed class Day04 : Day private readonly List> _boards; private readonly int _size; - public Day04() : base(4, "Giant Squid") + public Day04() : base(2021, 4, "Giant Squid") { _call = Input.First().Split(',').Select(int.Parse).ToList(); _boards = new(); diff --git a/AOC2021/Day05.cs b/AOC2021/Day05.cs index cb6e615..e46e7dd 100644 --- a/AOC2021/Day05.cs +++ b/AOC2021/Day05.cs @@ -5,7 +5,7 @@ /// public sealed class Day05 : Day { - public Day05() : base(5, "Hydrothermal Venture") + public Day05() : base(2021, 5, "Hydrothermal Venture") { } diff --git a/AOC2021/Day06.cs b/AOC2021/Day06.cs index a9a10ee..48ff3b2 100644 --- a/AOC2021/Day06.cs +++ b/AOC2021/Day06.cs @@ -7,7 +7,7 @@ public sealed class Day06 : Day { private readonly long _p1, _p2; - public Day06() : base(6, "Lanternfish") + public Day06() : base(2021, 6, "Lanternfish") { var fishes = Input.First().Split(',').Select(long.Parse).ToList(); Dictionary counts = new(); diff --git a/AOC2021/Day07.cs b/AOC2021/Day07.cs index cd1c816..ecacee9 100644 --- a/AOC2021/Day07.cs +++ b/AOC2021/Day07.cs @@ -7,7 +7,7 @@ public sealed class Day07 : Day { private readonly List _tape; - public Day07() : base(7, "The Treachery of Whales") + public Day07() : base(2021, 7, "The Treachery of Whales") { _tape = Input.First().Split(',').Select(long.Parse).OrderBy(i => i).ToList(); } diff --git a/AOC2021/Day08.cs b/AOC2021/Day08.cs index db302d1..fddf3ca 100644 --- a/AOC2021/Day08.cs +++ b/AOC2021/Day08.cs @@ -8,7 +8,7 @@ public sealed class Day08 : Day private static readonly List PossibleMappings = "abcdefg".ToCharArray().Permute().Select(m => m.ToArray()).ToList(); - public Day08() : base(8, "Seven Segment Search") + public Day08() : base(2021, 8, "Seven Segment Search") { } diff --git a/AOC2021/Day09.cs b/AOC2021/Day09.cs index 175ace3..69da728 100644 --- a/AOC2021/Day09.cs +++ b/AOC2021/Day09.cs @@ -11,7 +11,7 @@ public sealed class Day09 : Day private readonly List<(int x, int y)> _lowPoints; private readonly List _map; - public Day09() : base(9, "Smoke Basin") + public Day09() : base(2021, 9, "Smoke Basin") { _part1Sum = 0; _lowPoints = new(); diff --git a/AOC2021/Day10.cs b/AOC2021/Day10.cs index fbedd00..1211266 100644 --- a/AOC2021/Day10.cs +++ b/AOC2021/Day10.cs @@ -32,7 +32,7 @@ public sealed class Day10 : Day private readonly long _score1; private readonly List _scores2 = new(); - public Day10() : base(10, "Syntax Scoring") + public Day10() : base(2021, 10, "Syntax Scoring") { _score1 = 0L; foreach (var line in Input) diff --git a/AOC2021/Day11.cs b/AOC2021/Day11.cs index 8d78577..c6d08a5 100644 --- a/AOC2021/Day11.cs +++ b/AOC2021/Day11.cs @@ -9,7 +9,7 @@ public sealed class Day11 : Day private readonly int _flashesAfter100, _totalTurns; private readonly int[][] _octopusField; - public Day11() : base(11, "Dumbo Octopus") + public Day11() : base(2021, 11, "Dumbo Octopus") { _octopusField = Input.Select(line => line.Select(c => int.Parse($"{c}")).ToArray()).ToArray(); diff --git a/AOC2021/Day12.cs b/AOC2021/Day12.cs index 7523373..0377cdb 100644 --- a/AOC2021/Day12.cs +++ b/AOC2021/Day12.cs @@ -7,7 +7,7 @@ public sealed class Day12 : Day { private readonly Dictionary> _edges = new(); - public Day12() : base(12, "Passage Pathing") + public Day12() : base(2021, 12, "Passage Pathing") { foreach (var line in Input) { diff --git a/AOC2021/Day13.cs b/AOC2021/Day13.cs index 74e7940..678db1e 100644 --- a/AOC2021/Day13.cs +++ b/AOC2021/Day13.cs @@ -10,7 +10,7 @@ public sealed class Day13 : Day private List<(int x, int y)> _dots; private readonly List<(char axis, int index)> _folds; - public Day13() : base(13, "Transparent Origami") + public Day13() : base(2021, 13, "Transparent Origami") { var s = Input.Split("").ToList(); diff --git a/AOC2021/Day14.cs b/AOC2021/Day14.cs index b053e73..f460db4 100644 --- a/AOC2021/Day14.cs +++ b/AOC2021/Day14.cs @@ -8,7 +8,7 @@ public sealed class Day14 : Day private readonly string _template; private readonly Dictionary _substitutionPairs; - public Day14() : base(14, "Extended Polymerization") + public Day14() : base(2021, 14, "Extended Polymerization") { _template = Input.First(); _substitutionPairs = Input.Skip(2).Select(l => l.Split(" -> ")).ToDictionary(k => k[0], v => v[1]); diff --git a/AOC2021/Day15.cs b/AOC2021/Day15.cs index 653cd3e..402414d 100644 --- a/AOC2021/Day15.cs +++ b/AOC2021/Day15.cs @@ -19,7 +19,7 @@ public sealed class Day15 : Day private readonly Dictionary<(int x, int y), Node> _grid; private readonly int _width; - public Day15() : base(15, "Chiton") + public Day15() : base(2021, 15, "Chiton") { _grid = Input .SelectMany((line, y) => diff --git a/AOC2021/Day16.cs b/AOC2021/Day16.cs index b522dd5..93640a5 100644 --- a/AOC2021/Day16.cs +++ b/AOC2021/Day16.cs @@ -7,7 +7,7 @@ public sealed class Day16 : Day { private readonly Packet _packet; - public Day16() : base(16, "Packet Decoder") + public Day16() : base(2021, 16, "Packet Decoder") { var bits = string.Join(string.Empty, Input.First().Select(c => Convert.ToString(Convert.ToInt32(c.ToString(), 16), 2).PadLeft(4, '0'))); diff --git a/AOC2021/Day17.cs b/AOC2021/Day17.cs index 1cc5a8d..88bba0b 100644 --- a/AOC2021/Day17.cs +++ b/AOC2021/Day17.cs @@ -7,7 +7,7 @@ public sealed class Day17 : Day { private readonly List _target; - public Day17() : base(17, "Trick Shot") + public Day17() : base(2021, 17, "Trick Shot") { _target = Input.First() .Split(' ', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries) diff --git a/AOC2021/Day18.cs b/AOC2021/Day18.cs index 99c6953..27b475b 100644 --- a/AOC2021/Day18.cs +++ b/AOC2021/Day18.cs @@ -7,7 +7,7 @@ public sealed class Day18 : Day { private readonly List _fishes; - public Day18() : base(18, "Snailfish") + public Day18() : base(2021, 18, "Snailfish") { _fishes = Input.ToList(); } diff --git a/AOC2021/Day19.cs b/AOC2021/Day19.cs index d70c953..331553d 100644 --- a/AOC2021/Day19.cs +++ b/AOC2021/Day19.cs @@ -11,7 +11,7 @@ public sealed class Day19 : Day private readonly List> _scans; private List> _scanners = new(); - public Day19() : base(19, "Beacon Scanner") + public Day19() : base(2021, 19, "Beacon Scanner") { _scans = Input .Aggregate(new List>(), (list, line) => diff --git a/AOC2021/Day20.cs b/AOC2021/Day20.cs index d235db7..9a1e4d9 100644 --- a/AOC2021/Day20.cs +++ b/AOC2021/Day20.cs @@ -8,7 +8,7 @@ public sealed class Day20 : Day private readonly ImmutableArray _enhancementAlgorithm; private readonly Image _initialImage; - public Day20() : base(20, "Trench Map") + public Day20() : base(2021, 20, "Trench Map") { _enhancementAlgorithm = Input.First().Select(ch => ch == '#').ToImmutableArray(); _initialImage = Parse(Input.Skip(2).ToList()); diff --git a/AOC2021/Day21.cs b/AOC2021/Day21.cs index 981d9ec..e30f1ec 100644 --- a/AOC2021/Day21.cs +++ b/AOC2021/Day21.cs @@ -11,7 +11,7 @@ public sealed class Day21 : Day private int _rollCount; private ulong _player1Victories, _player2Victories; - public Day21() : base(21, "Dirac Dice") + public Day21() : base(2021, 21, "Dirac Dice") { var s = Input .Select(l => l.Split(": ")[1]) diff --git a/AOC2021/Day22.cs b/AOC2021/Day22.cs index f200cad..2aa3adc 100644 --- a/AOC2021/Day22.cs +++ b/AOC2021/Day22.cs @@ -7,7 +7,7 @@ public sealed class Day22 : Day { private readonly List _instructions = new(); - public Day22() : base(22, "Reactor Reboot") + public Day22() : base(2021, 22, "Reactor Reboot") { foreach (var line in Input) { diff --git a/AOC2021/Day23.cs b/AOC2021/Day23.cs index 1c3e50f..5cb1623 100644 --- a/AOC2021/Day23.cs +++ b/AOC2021/Day23.cs @@ -7,7 +7,7 @@ public sealed class Day23 : Day { private readonly List _crabs; - public Day23() : base(23, "Amphipod") + public Day23() : base(2021, 23, "Amphipod") { _crabs = Input.SelectMany(l => l).Where(char.IsLetter).ToList(); } diff --git a/AOC2021/Day24.cs b/AOC2021/Day24.cs index d72dafa..1265912 100644 --- a/AOC2021/Day24.cs +++ b/AOC2021/Day24.cs @@ -7,7 +7,7 @@ public sealed class Day24 : Day { private readonly Dictionary _keys = new(); - public Day24() : base(24, "Arithmetic Logic Unit") + public Day24() : base(2021, 24, "Arithmetic Logic Unit") { var lines = Input.ToList(); var pairs = Enumerable.Range(0, 14) diff --git a/AOC2021/Day25.cs b/AOC2021/Day25.cs index f4d7456..652988e 100644 --- a/AOC2021/Day25.cs +++ b/AOC2021/Day25.cs @@ -7,7 +7,7 @@ public sealed class Day25 : Day { private readonly char[][] _cucumbers; - public Day25() : base(25, "Sea Cucumber") + public Day25() : base(2021, 25, "Sea Cucumber") { _cucumbers = Input.Select(l => l.ToCharArray()).ToArray(); } diff --git a/AOC2021/Program.cs b/AOC2021/Program.cs index de2e448..acdeb6a 100644 --- a/AOC2021/Program.cs +++ b/AOC2021/Program.cs @@ -1,6 +1,4 @@ -Day.Year = 2021; - -var days = Assembly.GetExecutingAssembly().GetTypes() +var days = Assembly.GetExecutingAssembly().GetTypes() .Where(t => t.BaseType == typeof(Day)) .Select(t => (Activator.CreateInstance(t) as Day)!) .OrderBy(d => d.DayNumber); diff --git a/AOC2022/AOC2022.csproj b/AOC2022/AOC2022.csproj new file mode 100644 index 0000000..5201930 --- /dev/null +++ b/AOC2022/AOC2022.csproj @@ -0,0 +1,29 @@ + + + + Exe + net6.0 + enable + enable + + + + + PreserveNewest + + + + + + + + + + + + + + + + + diff --git a/AOC2022/Day01.cs b/AOC2022/Day01.cs new file mode 100644 index 0000000..783fcde --- /dev/null +++ b/AOC2022/Day01.cs @@ -0,0 +1,21 @@ +namespace AOC2022; + +/// +/// Day 1: +/// +public sealed class Day01 : Day +{ + public Day01() : base(2022, 1, "Day 1 Puzzle Name") + { + } + + public override object Part1() + { + return ""; + } + + public override object Part2() + { + return ""; + } +} \ No newline at end of file diff --git a/AOC2022/Program.cs b/AOC2022/Program.cs new file mode 100644 index 0000000..acdeb6a --- /dev/null +++ b/AOC2022/Program.cs @@ -0,0 +1,15 @@ +var days = Assembly.GetExecutingAssembly().GetTypes() + .Where(t => t.BaseType == typeof(Day)) + .Select(t => (Activator.CreateInstance(t) as Day)!) + .OrderBy(d => d.DayNumber); + +if (args.Length == 1 && int.TryParse(args[0], out var dayNum)) +{ + var day = days.FirstOrDefault(d => d.DayNumber == dayNum); + if (day != null) day.AllParts(); + else Console.WriteLine($"Day {dayNum} invalid or not yet implemented"); +} +else +{ + foreach (var d in days) d.AllParts(); +} \ No newline at end of file diff --git a/AOC2022/input2022/day01.in b/AOC2022/input2022/day01.in new file mode 100644 index 0000000..e69de29 diff --git a/AdventOfCode.sln b/AdventOfCode.sln index 8e9b8b7..98fa3a8 100644 --- a/AdventOfCode.sln +++ b/AdventOfCode.sln @@ -10,6 +10,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AOC.Common", "AOC.Common\AO EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AOC.Test", "AOC.Test\AOC.Test.csproj", "{8A2E8FC3-BC6B-4C7D-B7B2-C949DB484C88}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AOC2022", "AOC2022\AOC2022.csproj", "{AF6D6164-420C-45B6-BCF3-1729D7374986}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -36,5 +38,9 @@ Global {8A2E8FC3-BC6B-4C7D-B7B2-C949DB484C88}.Debug|Any CPU.Build.0 = Debug|Any CPU {8A2E8FC3-BC6B-4C7D-B7B2-C949DB484C88}.Release|Any CPU.ActiveCfg = Release|Any CPU {8A2E8FC3-BC6B-4C7D-B7B2-C949DB484C88}.Release|Any CPU.Build.0 = Release|Any CPU + {AF6D6164-420C-45B6-BCF3-1729D7374986}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF6D6164-420C-45B6-BCF3-1729D7374986}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF6D6164-420C-45B6-BCF3-1729D7374986}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AF6D6164-420C-45B6-BCF3-1729D7374986}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal