diff --git a/advent-of-code-2023.csproj b/advent-of-code-2023.csproj index 7545f36..d69084c 100644 --- a/advent-of-code-2023.csproj +++ b/advent-of-code-2023.csproj @@ -40,6 +40,8 @@ + + diff --git a/inputs/06.txt b/inputs/06.txt new file mode 100644 index 0000000..08fcbc9 --- /dev/null +++ b/inputs/06.txt @@ -0,0 +1,2 @@ +Time: 44 70 70 80 +Distance: 283 1134 1134 1491 \ No newline at end of file diff --git a/inputs/06a.txt b/inputs/06a.txt new file mode 100644 index 0000000..b948cae --- /dev/null +++ b/inputs/06a.txt @@ -0,0 +1,2 @@ +Time: 7 15 30 +Distance: 9 40 200 \ No newline at end of file diff --git a/src/06.cs b/src/06.cs new file mode 100644 index 0000000..15490de --- /dev/null +++ b/src/06.cs @@ -0,0 +1,67 @@ +namespace aoc2023; + +internal class Day06 : Day +{ + private List times = new(); + private List dists = new(); + private long time = 0; + private long dist = 0; + internal override void Parse() + { + var lines = Util.Parsing.ReadAllLines($"{GetDay()}").ToList(); + var timeline = lines[0].Split(':'); + times = timeline[1].Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList(); + time = long.Parse(timeline[1].Replace(" ", "")); + var distline = lines[1].Split(':'); + dists = distline[1].Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList(); + dist = long.Parse(distline[1].Replace(" ", "")); + } + + internal override string Part1() + { + long total = 1; + for (int i = 0; i < times.Count; i++) + { + long numWins = 0; + bool hasWon = false; + for (int chargetime = 1; chargetime < times[i]; chargetime++) + { + var d = chargetime * (times[i] - chargetime); + if (d > dists[i]) + { + hasWon = true; + numWins++; + } + else if (hasWon) + { + break; + } + } + + total *= numWins; + } + + return $"Multiplied number of wins total: <+white>{total}"; + } + + internal override string Part2() + { + long numWins = 0; + bool hasWon = false; + for (int chargetime = 1; chargetime < time; chargetime++) + { + var d = chargetime * (time - chargetime); + if (d > dist) + { + hasWon = true; + numWins++; + } + else if (hasWon) + { + break; + } + } + + return $"Number of wins with correct kerning: <+white>{numWins}"; + } +}