Add another Day07 part 2 solution, that's way simpler
This commit is contained in:
parent
62f46aff7d
commit
afc7997fa2
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue