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

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> <ItemGroup>
<Using Include="System.Diagnostics" /> <Using Include="System.Diagnostics" />
<Using Include="System.Numerics" /> <Using Include="System.Numerics" />
<Using Include="System.Reflection" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -10,7 +10,7 @@ public abstract class Day
} }
public static bool UseTestInput { get; set; } public static bool UseTestInput { get; set; }
public int Year { get; } public int Year { get; }
public int DayNumber { get; } public int DayNumber { get; }
public string PuzzleName { get; } public string PuzzleName { get; }
@ -25,9 +25,9 @@ public abstract class Day
public abstract object Part1(); public abstract object Part1();
public abstract object Part2(); 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 s = Stopwatch.StartNew();
var part1 = Part1(); var part1 = Part1();
s.Stop(); s.Stop();
@ -44,4 +44,30 @@ public abstract class Day
Console.WriteLine(); 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() Day.RunFromArgs(args);
.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();
}

View File

@ -1,15 +1 @@
var days = Assembly.GetExecutingAssembly().GetTypes() Day.RunFromArgs(args);
.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();
}

View File

@ -1,15 +1 @@
var days = Assembly.GetExecutingAssembly().GetTypes() Day.RunFromArgs(args);
.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();
}

View File

@ -1,15 +1 @@
var days = Assembly.GetExecutingAssembly().GetTypes() Day.RunFromArgs(args);
.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();
}