add Day.RunFromArgs to remove duplicate functionality in each year
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
789247aedf
commit
0b623caa0a
|
@ -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>
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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();
|
|
||||||
}
|
|
|
@ -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();
|
|
||||||
}
|
|
|
@ -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();
|
|
||||||
}
|
|
|
@ -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();
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user