ben
/
aoc
1
0
Fork 0

add Day.RunFromArgs to remove duplicate functionality in each year
continuous-integration/drone/push Build is failing Details

This commit is contained in:
Ben Harris 2022-10-27 12:46:16 -04:00
parent 789247aedf
commit 0b623caa0a
6 changed files with 35 additions and 64 deletions

View File

@ -7,5 +7,6 @@
<ItemGroup>
<Using Include="System.Diagnostics" />
<Using Include="System.Numerics" />
<Using Include="System.Reflection" />
</ItemGroup>
</Project>

View File

@ -10,7 +10,7 @@ public abstract class Day
}
public static bool UseTestInput { get; set; }
public int Year { get; }
public int DayNumber { get; }
public string PuzzleName { get; }
@ -25,9 +25,9 @@ public abstract class Day
public abstract object Part1();
public abstract object Part2();
public void AllParts(bool verbose = true)
private void AllParts(bool verbose = true)
{
Console.WriteLine($"Day {DayNumber,2}: {PuzzleName}");
Console.WriteLine($"{Year} Day {DayNumber,2}: {PuzzleName}");
var s = Stopwatch.StartNew();
var part1 = Part1();
s.Stop();
@ -44,4 +44,30 @@ public abstract class Day
Console.WriteLine();
}
}
public static void RunFromArgs(string[] args)
{
var days = Assembly.GetEntryAssembly()?.GetTypes()
.Where(t => t.BaseType == typeof(Day))
.Select(t => (Activator.CreateInstance(t) as Day)!)
.OrderBy(d => d.DayNumber)
.ToList();
if (days == null || !days.Any())
{
throw new ApplicationException("no days found");
}
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();
}
}
}

View File

@ -1,15 +1 @@
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();
}
Day.RunFromArgs(args);

View File

@ -1,15 +1 @@
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();
}
Day.RunFromArgs(args);

View File

@ -1,15 +1 @@
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();
}
Day.RunFromArgs(args);

View File

@ -1,15 +1 @@
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();
}
Day.RunFromArgs(args);