Add another Day07 part 2 solution, that's way simpler

This commit is contained in:
Sebastian Lindemeier 2025-12-08 07:00:50 +01:00
parent 62f46aff7d
commit afc7997fa2
2 changed files with 59 additions and 2 deletions

View File

@ -44,4 +44,24 @@ public class Day07Test
Assert.Equal(53916299384254, actual); Assert.Equal(53916299384254, actual);
} }
[Fact]
public void Part02Again_Test_equals_40()
{
var sut = _sut as Day07;
var actual = sut.SolvePart2Again(TestInputPath);
Assert.Equal(40, actual);
}
[Fact]
public void Part02Again_Prod_equals_53916299384254()
{
var sut = _sut as Day07;
var actual = sut.SolvePart2Again(ProdInputPath);
Assert.Equal(53916299384254, actual);
}
} }

View File

@ -29,8 +29,15 @@ public class Day07 : IPuzzleSolver<long>
{ {
var grid = ParsePuzzleInput(pathToPuzzleInput); var grid = ParsePuzzleInput(pathToPuzzleInput);
var start = GetStart(grid); var start = GetStart(grid);
var count = GetNodesTraversedWitTimelineCount(grid, start, [], []); var nodesWithCount = GetNodesTraversedWitTimelineCount(grid, start, [], []);
return count[start]; return nodesWithCount[start];
}
public long SolvePart2Again(string pathToPuzzleInput)
{
var grid = ParsePuzzleInput(pathToPuzzleInput);
var nodesWithCount = GetNodesTraversedWitTimelineCount(grid);
return nodesWithCount.Sum();
} }
private Coordinate GetStart(string[] grid) private Coordinate GetStart(string[] grid)
@ -99,4 +106,34 @@ public class Day07 : IPuzzleSolver<long>
return nodeCountVisited; return nodeCountVisited;
} }
private long[] GetNodesTraversedWitTimelineCount(string[] grid)
{
var numbersGrid = grid
.Select(line => line.Select(c => 0L).ToArray())
.ToArray();
for (var x = 1; x < numbersGrid.Length; x++)
{
for (var y = 0; y < numbersGrid[x].Length; y++)
{
var gridValue = grid[x - 1][y];
switch (gridValue)
{
case 'S':
numbersGrid[x][y] = 1;
break;
case '.':
numbersGrid[x][y] += numbersGrid[x - 1][y];
break;
case '^':
numbersGrid[x][y - 1] += numbersGrid[x - 1][y];
numbersGrid[x][y + 1] += numbersGrid[x - 1][y];
break;
}
}
}
return numbersGrid[^1];
}
} }