ben
/
aoc
1
0
Fork 0

make ProcessInput virtual instead of abstract and remove empty method bodies
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Ben Harris 2023-12-05 15:01:01 -05:00
parent 843f58cf8c
commit b254c48ec4
115 changed files with 383 additions and 485 deletions

View File

@ -2,23 +2,66 @@ using CommandLine;
namespace AOC.Common;
/// <summary>
/// Base class for a day's solution. Provides stopwatch timing and command line parsing.
/// </summary>
/// <param name="year"></param>
/// <param name="day"></param>
/// <param name="puzzleName"></param>
public abstract class Day(int year, int day, string puzzleName)
{
/// <summary>
/// The year this Day is from.
/// </summary>
public int Year { get; } = year;
/// <summary>
/// What day it is.
/// </summary>
public int DayNumber { get; } = day;
/// <summary>
/// The name of the puzzle.
/// </summary>
public string PuzzleName { get; } = puzzleName;
/// <summary>
/// Enumerable of all lines in the input file.
/// </summary>
protected IEnumerable<string> Input => File.ReadLines(FileName);
/// <summary>
/// Input file as a <see cref="ReadOnlySpan">span</see>.
/// </summary>
protected ReadOnlySpan<char> InputBytes => File.ReadAllText(FileName);
/// <summary>
/// Path to the input file in the format of "inputYEAR/dayNN.in".
/// </summary>
public string FileName =>
Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
$"input{Year}/{(UseTestInput ? "test" : "day")}{DayNumber,2:00}.in");
/// <summary>
/// A toggle to read the test input file instead of the real input.
/// </summary>
public static bool UseTestInput { get; set; }
private readonly Stopwatch _stopwatch = new();
public abstract void ProcessInput();
/// <summary>
/// Initial parsing of the puzzle input.
/// </summary>
public virtual void ProcessInput()
{
}
/// <summary>
/// Solve Part 1.
/// </summary>
/// <returns>object whose string representation will be the answer</returns>
public abstract object Part1();
/// <summary>
/// Solve Part 2.
/// </summary>
/// <returns>object whose string representation will be the answer</returns>
public abstract object Part2();
private void PrintProcessInput()
@ -63,6 +106,12 @@ public abstract class Day(int year, int day, string puzzleName)
public int? PartNumber { get; set; }
}
/// <summary>
/// Parse the command line args and run the appropriate puzzles.
/// </summary>
/// <param name="args"></param>
/// <exception cref="ApplicationException"></exception>
/// <exception cref="ArgumentOutOfRangeException"></exception>
public static void RunFromArgs(string[] args)
{
var days = Assembly.GetEntryAssembly()?.GetTypes()

View File

@ -18,6 +18,7 @@ public class Test2023
[DataRow(typeof(Day02), "8", "2286")]
[DataRow(typeof(Day03), "4361", "467835")]
[DataRow(typeof(Day04), "13", "30")]
// [DataRow(typeof(Day05), "35", "")]
public void CheckTestInputs(Type dayType, string part1, string part2) =>
Common.CheckDay(dayType, part1, part2, true);
}

View File

@ -2,10 +2,6 @@ namespace AOC2015;
public class Day01() : Day(2015, 1, "Not Quite Lisp")
{
public override void ProcessInput()
{
}
public override object Part1()
{
var floor = 0;

View File

@ -5,10 +5,6 @@ namespace AOC2015;
/// </summary>
public sealed class Day03() : Day(2015, 3, "Perfectly Spherical Houses in a Vacuum")
{
public override void ProcessInput()
{
}
public override object Part1()
{
int x = 0, y = 0;

View File

@ -11,10 +11,6 @@ public sealed partial class Day06() : Day(2015, 6, "Probably a Fire Hazard")
[GeneratedRegex(@"(\d+),(\d+) through (\d+),(\d+)")]
private static partial Regex Coords();
public override void ProcessInput()
{
}
public override object Part1()
{
foreach (var line in Input)

View File

@ -8,10 +8,6 @@ public sealed class Day07() : Day(2015, 7, "Some Assembly Required")
private readonly Dictionary<string, Func<ushort>> _actions = [];
private readonly Dictionary<string, ushort> _wires = [];
public override void ProcessInput()
{
}
public override object Part1()
{
ProcessInstructions();
@ -116,4 +112,4 @@ public sealed class Day07() : Day(2015, 7, "Some Assembly Required")
_actions["b"] = () => p1;
return _actions["a"]();
}
}
}

View File

@ -8,10 +8,6 @@ public sealed partial class Day08() : Day(2015, 8, "Matchsticks")
[GeneratedRegex("""^"(\\x..|\\.|.)*"$""")]
private static partial Regex CharSet();
public override void ProcessInput()
{
}
private static int CharCount(string arg) => CharSet().Match(arg).Groups[1].Captures.Count;
private static int EncodedCount(string arg) => 2 + arg.Sum(c => c is '\\' or '\"' ? 2 : 1);

View File

@ -11,10 +11,6 @@ public sealed partial class Day12() : Day(2015, 12, "JSAbacusFramework.io")
[GeneratedRegex(@"-?\d+")]
private static partial Regex Digits();
public override void ProcessInput()
{
}
public override object Part1() =>
Digits().Matches(Input.First()).Sum(n => int.Parse(n.Value));

View File

@ -8,10 +8,6 @@ public sealed partial class Day16() : Day(2015, 16, "Aunt Sue")
[GeneratedRegex(@": \d\d")]
private static partial Regex TwoDigitsRegex();
public override void ProcessInput()
{
}
private IEnumerable<string> Common() =>
Input
.Select(i => TwoDigitsRegex().Replace(i, ": 9"))

View File

@ -5,10 +5,6 @@ namespace AOC2015;
/// </summary>
public sealed class Day23() : Day(2015, 23, "Opening the Turing Lock")
{
public override void ProcessInput()
{
}
private int RunOperations(int initialA = 0, int initialB = 0)
{
Dictionary<char, int> registers = new()
@ -53,4 +49,4 @@ public sealed class Day23() : Day(2015, 23, "Opening the Turing Lock")
public override object Part1() => RunOperations();
public override object Part2() => RunOperations(1);
}
}

View File

@ -5,10 +5,6 @@ namespace AOC2015;
/// </summary>
public sealed class Day24() : Day(2015, 24, "It Hangs in the Balance")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day02() : Day(2016, 2, "Bathroom Security")
{
public override void ProcessInput()
{
}
public override object Part1()
{
List<int> answer = [];

View File

@ -7,10 +7,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day05() : Day(2016, 5, "How About a Nice Game of Chess?")
{
public override void ProcessInput()
{
}
public override object Part1()
{
var s = Input.First();
@ -55,4 +51,4 @@ public sealed class Day05() : Day(2016, 5, "How About a Nice Game of Chess?")
return new string(answer);
}
}
}

View File

@ -11,10 +11,6 @@ public sealed partial class Day07() : Day(2016, 7, "Internet Protocol Version 7"
[GeneratedRegex(@"\[(\w*)\]")]
private static partial Regex InsideBracketsRegex();
public override void ProcessInput()
{
}
private static bool SupportsTls(string input) =>
!InsideBracketsRegex().Matches(input).Any(m => CheckAbba(m.ValueSpan)) &&
BracketsRegex().Split(input).Any(v => CheckAbba(v));

View File

@ -5,10 +5,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day08() : Day(2016, 8, "Two-Factor Authentication")
{
public override void ProcessInput()
{
}
private static string PrintGrid(char[,] screen)
{
var sb = new StringBuilder();

View File

@ -5,10 +5,7 @@ namespace AOC2016;
/// </summary>
public sealed class Day09() : Day(2016, 9, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day10() : Day(2016, 10, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day11() : Day(2016, 11, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day12() : Day(2016, 12, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day13() : Day(2016, 13, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day14() : Day(2016, 14, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day15() : Day(2016, 15, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day16() : Day(2016, 16, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day17() : Day(2016, 17, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day18() : Day(2016, 18, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day19() : Day(2016, 19, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day20() : Day(2016, 20, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day21() : Day(2016, 21, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day22() : Day(2016, 22, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day23() : Day(2016, 23, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day24() : Day(2016, 24, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2016;
/// </summary>
public sealed class Day25() : Day(2016, 25, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day01() : Day(2017, 1, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day02() : Day(2017, 2, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day03() : Day(2017, 3, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day04() : Day(2017, 4, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day05() : Day(2017, 5, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day06() : Day(2017, 6, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day07() : Day(2017, 7, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day08() : Day(2017, 8, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day09() : Day(2017, 9, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day10() : Day(2017, 10, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day11() : Day(2017, 11, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day12() : Day(2017, 12, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day13() : Day(2017, 13, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day14() : Day(2017, 14, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day15() : Day(2017, 15, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day16() : Day(2017, 16, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day17() : Day(2017, 17, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day18() : Day(2017, 18, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day19() : Day(2017, 19, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day20() : Day(2017, 20, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day21() : Day(2017, 21, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day22() : Day(2017, 22, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day23() : Day(2017, 23, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,11 +5,7 @@ namespace AOC2017;
/// </summary>
public sealed class Day24() : Day(2017, 24, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part1() => "";
public override object Part2() => "";
}

View File

@ -5,10 +5,6 @@ namespace AOC2017;
/// </summary>
public sealed class Day25() : Day(2017, 25, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day01() : Day(2018, 1, "Chronal Calibration")
{
public override void ProcessInput()
{
}
public override object Part1() => Input.Select(int.Parse).Sum();
public override object Part2()

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day02() : Day(2018, 2, "Inventory Management System")
{
public override void ProcessInput()
{
}
private static bool HasNChars(string line, int count)
{
for (var i = 'a'; i <= 'z'; i++)
@ -31,4 +27,4 @@ public sealed class Day02() : Day(2018, 2, "Inventory Management System")
throw new("Correct IDs not found");
}
}
}

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day04() : Day(2018, 4, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day05() : Day(2018, 5, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,11 +5,7 @@ namespace AOC2018;
/// </summary>
public sealed class Day06() : Day(2018, 6, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part1() => "";
public override object Part2() => "";
}

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day07() : Day(2018, 7, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day08() : Day(2018, 8, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day09() : Day(2018, 9, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day10() : Day(2018, 10, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,11 +5,7 @@ namespace AOC2018;
/// </summary>
public sealed class Day11() : Day(2018, 11, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part1() => "";
public override object Part2() => "";
}

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day12() : Day(2018, 12, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day13() : Day(2018, 13, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day14() : Day(2018, 14, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day15() : Day(2018, 15, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day16() : Day(2018, 16, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day17() : Day(2018, 17, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day18() : Day(2018, 18, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day19() : Day(2018, 19, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day20() : Day(2018, 20, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,11 +5,7 @@ namespace AOC2018;
/// </summary>
public sealed class Day21() : Day(2018, 21, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part1() => "";
public override object Part2() => "";
}

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day22() : Day(2018, 22, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day23() : Day(2018, 23, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day24() : Day(2018, 24, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2018;
/// </summary>
public sealed class Day25() : Day(2018, 25, "Puzzle Name")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -2,10 +2,6 @@ namespace AOC2019;
public sealed class Day18() : Day(2019, 18, "Many-Worlds Interpretation")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -2,10 +2,6 @@ namespace AOC2019;
public sealed class Day20() : Day(2019, 20, "Donut Maze")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -1,22 +1,8 @@
namespace AOC2019;
public sealed class Day21 : Day
public sealed class Day21() : Day(2019, 21, "Springdroid Adventure")
{
private readonly IntCodeVM _vm;
public Day21() : base(2019, 21, "Springdroid Adventure") =>
_vm = new(Input.First());
public override void ProcessInput()
{
}
public override object Part1()
{
_vm.Reset();
var halt = _vm.Run();
return "";
}
public override object Part1() => "";
public override object Part2() => "";
}

View File

@ -2,10 +2,6 @@ namespace AOC2019;
public sealed class Day22() : Day(2019, 22, "Slam Shuffle")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -2,10 +2,6 @@ namespace AOC2019;
public sealed class Day23() : Day(2019, 23, "Category Six")
{
public override void ProcessInput()
{
}
public override object Part1()
{
var vms = Enumerable.Range(0, 50)

View File

@ -2,10 +2,6 @@ namespace AOC2019;
public sealed class Day24() : Day(2019, 24, "Planet of Discord")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -2,10 +2,6 @@ namespace AOC2019;
public sealed class Day25() : Day(2019, 25, "Cryostasis")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2020;
/// </summary>
public sealed class Day11() : Day(2020, 11, "Seating System")
{
public override void ProcessInput()
{
}
public override object Part1()
{
var prev = new LifeGame(Input);
@ -73,13 +69,13 @@ public sealed class Day11() : Day(2020, 11, "Seating System")
{
var next = new LifeGame { _h = _h, _w = _w, Grid = Grid.Select(s => s.ToArray()).ToArray() };
for (var y = 0; y < _h; y++)
for (var x = 0; x < _w; x++)
next.Grid[y][x] = Grid[y][x] switch
{
'L' when CountAdjacent(y, x) == 0 => '#',
'#' when CountAdjacent(y, x) >= 4 => 'L',
_ => Grid[y][x]
};
for (var x = 0; x < _w; x++)
next.Grid[y][x] = Grid[y][x] switch
{
'L' when CountAdjacent(y, x) == 0 => '#',
'#' when CountAdjacent(y, x) >= 4 => 'L',
_ => Grid[y][x]
};
// next.PrintBoard();
return next;
@ -91,8 +87,7 @@ public sealed class Day11() : Day(2020, 11, "Seating System")
private int CountAdjacent(int y, int x) =>
new[]
{
At(y - 1, x - 1), At(y - 1, x + 0), At(y - 1, x + 1),
At(y + 0, x - 1), At(y + 0, x + 1),
At(y - 1, x - 1), At(y - 1, x + 0), At(y - 1, x + 1), At(y + 0, x - 1), At(y + 0, x + 1),
At(y + 1, x - 1), At(y + 1, x + 0), At(y + 1, x + 1)
}.Count(c => c == '#');
@ -100,13 +95,13 @@ public sealed class Day11() : Day(2020, 11, "Seating System")
{
var next = new LifeGame { _h = _h, _w = _w, Grid = Grid.Select(s => s.ToArray()).ToArray() };
for (var y = 0; y < _h; y++)
for (var x = 0; x < _w; x++)
next.Grid[y][x] = Grid[y][x] switch
{
'L' when CanSee(y, x) == 0 => '#',
'#' when CanSee(y, x) >= 5 => 'L',
_ => Grid[y][x]
};
for (var x = 0; x < _w; x++)
next.Grid[y][x] = Grid[y][x] switch
{
'L' when CanSee(y, x) == 0 => '#',
'#' when CanSee(y, x) >= 5 => 'L',
_ => Grid[y][x]
};
// next.PrintBoard();
return next;
@ -115,9 +110,8 @@ public sealed class Day11() : Day(2020, 11, "Seating System")
private int CanSee(int y, int x) =>
new[]
{
TraceRay(y, x, -1, -1), TraceRay(y, x, -1, +0), TraceRay(y, x, -1, +1),
TraceRay(y, x, +0, -1), TraceRay(y, x, +0, +1),
TraceRay(y, x, +1, -1), TraceRay(y, x, +1, +0), TraceRay(y, x, +1, +1)
TraceRay(y, x, -1, -1), TraceRay(y, x, -1, +0), TraceRay(y, x, -1, +1), TraceRay(y, x, +0, -1),
TraceRay(y, x, +0, +1), TraceRay(y, x, +1, -1), TraceRay(y, x, +1, +0), TraceRay(y, x, +1, +1)
}.Count(c => c == '#');
private char TraceRay(int y, int x, int dy, int dx)

View File

@ -5,10 +5,6 @@ namespace AOC2020;
/// </summary>
public sealed class Day12() : Day(2020, 12, "Rain Risk")
{
public override void ProcessInput()
{
}
private static void Swap(ref int x, ref int y) => (y, x) = (x, y);
private (int x, int y, int sx, int sy) ProcessInstructions()

View File

@ -5,10 +5,6 @@ namespace AOC2020;
/// </summary>
public sealed class Day14() : Day(2020, 14, "Docking Data")
{
public override void ProcessInput()
{
}
private static readonly char[] SquareBrackets = ['[', ']'];
private static readonly char[] BracketsAndEquals = [.. SquareBrackets, '='];

View File

@ -8,10 +8,6 @@ public sealed partial class Day20() : Day(2020, 20, "Jurassic Jigsaw")
[GeneratedRegex("(?<=#.{77})#.{4}#{2}.{4}#{2}.{4}#{3}(?=.{77}#.{2}#.{2}#.{2}#.{2}#.{2}#)")]
private static partial Regex MonsterRegex();
public override void ProcessInput()
{
}
public override object Part1()
{
var puzzlePieces = ParsePiecesFromInput(Input.ToArray());

View File

@ -5,10 +5,6 @@ namespace AOC2020;
/// </summary>
public sealed class Day25() : Day(2020, 25, "Combo Breaker")
{
public override void ProcessInput()
{
}
private static long Transform(long subject, int loopSize)
{
var value = 1L;

View File

@ -5,10 +5,6 @@ namespace AOC2021;
/// </summary>
public sealed class Day02() : Day(2021, 2, "Dive!")
{
public override void ProcessInput()
{
}
public override object Part1()
{
int horiz = 0, depth = 0;

View File

@ -5,10 +5,6 @@ namespace AOC2021;
/// </summary>
public sealed partial class Day05() : Day(2021, 5, "Hydrothermal Venture")
{
public override void ProcessInput()
{
}
private int Solve(bool diagonals = false) =>
Input
.Select(s => NonDigits().Split(s).Select(int.Parse).ToList())

View File

@ -9,10 +9,6 @@ public sealed class Day08() : Day(2021, 8, "Seven Segment Search")
"abcdefg".ToCharArray().Permute().Select(m => m.ToArray()).ToList();
private static readonly int[] SearchValues = { 2, 3, 4, 7 };
public override void ProcessInput()
{
}
private static int MatchDigit(string lit) =>
lit switch
{

View File

@ -5,10 +5,6 @@ namespace AOC2022;
/// </summary>
public sealed class Day03() : Day(2022, 3, "Rucksack Reorganization")
{
public override void ProcessInput()
{
}
public override object Part1() =>
Input.Sum(rucksack => RankItem(rucksack.Chunk(rucksack.Length / 2).Aggregate<IEnumerable<char>>((a, b) => a.Intersect(b)).Single()));
@ -16,4 +12,4 @@ public sealed class Day03() : Day(2022, 3, "Rucksack Reorganization")
Input.Chunk(3).Sum(group => RankItem(group.Aggregate<IEnumerable<char>>((a, b) => a.Intersect(b)).Single()));
private static int RankItem(char item) => item - (char.IsUpper(item) ? '&' : '`');
}
}

View File

@ -5,10 +5,6 @@ namespace AOC2022;
/// </summary>
public sealed class Day16() : Day(2022, 16, "Proboscidea Volcanium")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2022;
/// </summary>
public sealed class Day17() : Day(2022, 17, "Pyroclastic Flow")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

View File

@ -5,10 +5,6 @@ namespace AOC2022;
/// </summary>
public sealed class Day18() : Day(2022, 18, "Boiling Boulders")
{
public override void ProcessInput()
{
}
public override object Part1() => "";
public override object Part2() => "";

Some files were not shown because too many files have changed in this diff Show More