[2k25] Add day 1
This commit is contained in:
109
Days/Day3.cs
109
Days/Day3.cs
@@ -1,109 +0,0 @@
|
||||
using Spectre.Console;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
|
||||
public class Day3 : Day
|
||||
{
|
||||
public override int Number => 3;
|
||||
public override string Name => "Mull It Over";
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
var result = 0;
|
||||
|
||||
var input = Input.AsSpan();
|
||||
var mulStart = input.IndexOf("mul(");
|
||||
|
||||
while (mulStart != -1)
|
||||
{
|
||||
input = input[(mulStart + 4)..];
|
||||
|
||||
// Start of a mul operation, search the ending parenthesis and make sure it's before the next mul
|
||||
var mulEnd = input.IndexOf(")");
|
||||
var nextMulStart = input.IndexOf("mul(");
|
||||
|
||||
if (mulEnd != -1 && (nextMulStart == -1 || mulEnd < nextMulStart))
|
||||
{
|
||||
var operands = input[..mulEnd];
|
||||
var separator = operands.IndexOf(",");
|
||||
|
||||
if (separator != -1
|
||||
&& int.TryParse(operands[..separator], out var left)
|
||||
&& int.TryParse(operands[(separator + 1)..], out var right))
|
||||
{
|
||||
result += left * right;
|
||||
}
|
||||
}
|
||||
|
||||
mulStart = nextMulStart;
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Result: [yellow]{result}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
var result = 0;
|
||||
|
||||
var input = Input.AsSpan();
|
||||
var mulStart = input.IndexOf("mul(");
|
||||
|
||||
while (mulStart != -1)
|
||||
{
|
||||
// Check if there is a "don't()" before next mul
|
||||
var dontStart = input.IndexOf("don't()");
|
||||
|
||||
if (dontStart < mulStart)
|
||||
{
|
||||
// Search for next "do()"
|
||||
input = input[(dontStart + 7)..];
|
||||
|
||||
var doStart = input.IndexOf("do()");
|
||||
|
||||
if (doStart == -1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
input = input[(doStart + 4)..];
|
||||
|
||||
// Update next mult position
|
||||
mulStart = input.IndexOf("mul(");
|
||||
|
||||
if (mulStart == -1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
input = input[(mulStart + 4)..];
|
||||
|
||||
// Start of a mul operation, search the ending parenthesis and make sure it's before the next mul
|
||||
var mulEnd = input.IndexOf(")");
|
||||
var nextMulStart = input.IndexOf("mul(");
|
||||
|
||||
if (mulEnd != -1 && (nextMulStart == -1 || mulEnd < nextMulStart))
|
||||
{
|
||||
var operands = input[..mulEnd];
|
||||
var separator = operands.IndexOf(",");
|
||||
|
||||
if (separator != -1
|
||||
&& int.TryParse(operands[..separator], out var left)
|
||||
&& int.TryParse(operands[(separator + 1)..], out var right))
|
||||
{
|
||||
result += left * right;
|
||||
}
|
||||
}
|
||||
|
||||
mulStart = nextMulStart;
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Result: [yellow]{result}[/][/]");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user