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