Add part 2
This commit is contained in:
106
Day6/Program.cs
106
Day6/Program.cs
@@ -25,25 +25,83 @@ for (var j = 0; j < charArray.GetLength(1); j++)
|
||||
charArray[i, j] = lines[i][j];
|
||||
}
|
||||
|
||||
var nextPosition = CalculateNextPosition(guardCurrentPosition.Item1, guardCurrentPosition.Item2, guardDirection);
|
||||
var part1 = Part1(guardCurrentPosition, guardDirection, charArray, visitedPositions);
|
||||
var part2 = Part2(guardCurrentPosition, charArray);
|
||||
Console.WriteLine($"Part1: {part1}\nPart2: {part2}");
|
||||
|
||||
while (IsValid(nextPosition.Item1, nextPosition.Item2, charArray))
|
||||
int Part2((int,int) currentPosition, char[,] input)
|
||||
{
|
||||
if (IsBlocked(nextPosition.Item1, nextPosition.Item2, charArray))
|
||||
{
|
||||
guardDirection = (Direction)(((int)guardDirection + 1) % 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
guardCurrentPosition = (nextPosition.Item1, nextPosition.Item2);
|
||||
visitedPositions.Add([guardCurrentPosition.Item1, guardCurrentPosition.Item2]);
|
||||
}
|
||||
var potentialLoopPositions = new List<(int row, int col)>();
|
||||
|
||||
nextPosition = CalculateNextPosition(guardCurrentPosition.Item1, guardCurrentPosition.Item2, guardDirection);
|
||||
for (var i = 0; i < input.GetLength(0); i++)
|
||||
for (var j = 0; j < input.GetLength(1); j++)
|
||||
{
|
||||
if ((i, j) == currentPosition || input[i, j] == '#') continue;
|
||||
|
||||
var modifiedGrid = (char[,])input.Clone();
|
||||
modifiedGrid[i, j] = '#';
|
||||
|
||||
if (CausesLoop(currentPosition, modifiedGrid))
|
||||
{
|
||||
potentialLoopPositions.Add((i, j));
|
||||
}
|
||||
}
|
||||
|
||||
return potentialLoopPositions.Count;
|
||||
}
|
||||
|
||||
Console.WriteLine($"Part1: {visitedPositions.Select(x => $"r{x[0]},c{x[1]}").Distinct().Count()}");
|
||||
PrintMap(charArray, visitedPositions);
|
||||
bool CausesLoop((int row, int col) startPosition, char[,] input)
|
||||
{
|
||||
var currentPosition = startPosition;
|
||||
var currentDirection = Direction.Up;
|
||||
|
||||
var visited = new HashSet<((int row, int col), Direction)>();
|
||||
visited.Add((currentPosition, currentDirection));
|
||||
|
||||
while (true)
|
||||
{
|
||||
var nextPosition = CalculateNextPosition(currentPosition.row, currentPosition.col, currentDirection);
|
||||
|
||||
if (!IsValid(nextPosition.Item1, nextPosition.Item2, input))
|
||||
return false;
|
||||
|
||||
if (input[nextPosition.Item1, nextPosition.Item2] == '#')
|
||||
{
|
||||
currentDirection = (Direction)(((int)currentDirection + 1) % 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
currentPosition = nextPosition;
|
||||
}
|
||||
|
||||
if (!visited.Add((currentPosition, currentDirection)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int Part1((int,int) currentPosition, Direction direction, char[,] input, List<int[]> traveledPositions)
|
||||
{
|
||||
var nextPosition = CalculateNextPosition(currentPosition.Item1, currentPosition.Item2, direction);
|
||||
|
||||
while (IsValid(nextPosition.Item1, nextPosition.Item2, input))
|
||||
{
|
||||
if (IsBlocked(nextPosition.Item1, nextPosition.Item2, input))
|
||||
{
|
||||
direction = (Direction)(((int)direction + 1) % 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
currentPosition = (nextPosition.Item1, nextPosition.Item2);
|
||||
traveledPositions.Add([currentPosition.Item1, currentPosition.Item2]);
|
||||
}
|
||||
|
||||
nextPosition = CalculateNextPosition(currentPosition.Item1, currentPosition.Item2, direction);
|
||||
}
|
||||
|
||||
return traveledPositions.Select(x => $"r{x[0]},c{x[1]}").Distinct().Count();
|
||||
}
|
||||
|
||||
(int, int) CalculateNextPosition(int row, int col, Direction direction)
|
||||
{
|
||||
@@ -55,26 +113,6 @@ bool IsValid(int row, int column, char[,] grid) => row >= 0 && row < grid.GetLen
|
||||
|
||||
bool IsBlocked(int row, int col, char[,] grid) => grid[row, col] == '#';
|
||||
|
||||
void PrintMap(char[,] input, List<int[]> visitedPositions)
|
||||
{
|
||||
for (var i = 0; i < input.GetLength(0); i++)
|
||||
{
|
||||
for (var j = 0; j < input.GetLength(1); j++)
|
||||
{
|
||||
if (visitedPositions.Any(x => x[0] == i && x[1] == j) && input[i, j] != '^')
|
||||
{
|
||||
Console.Write("X");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.Write(input[i, j]);
|
||||
}
|
||||
}
|
||||
|
||||
Console.WriteLine();
|
||||
}
|
||||
}
|
||||
|
||||
enum Direction
|
||||
{
|
||||
Up,
|
||||
|
||||
140
Day6/input.txt
140
Day6/input.txt
@@ -1,10 +1,130 @@
|
||||
....#.....
|
||||
.........#
|
||||
..........
|
||||
..#.......
|
||||
.......#..
|
||||
..........
|
||||
.#..^.....
|
||||
........#.
|
||||
#.........
|
||||
......#...
|
||||
...............................#.........#............#...#.............................#....................#.....#........##....
|
||||
..##..##.#.#....................##....#..#.....#...............#..#.....#.....................#...#.............#...#...#.........
|
||||
...................#............#..................................................#............................#..#..............
|
||||
............#...................................................#.........................#..#....#....................#..........
|
||||
.#...........#...............................#..#....................................#............#.#............#................
|
||||
.........................#..........................................#.................#...#.....#.#...............................
|
||||
..#..................#......................................#......#........#.......#..........#.........#..#.........#...........
|
||||
..........#..............#....................................#................................................#........#........#
|
||||
..#...............................................................................................................#.#..#..........
|
||||
....#....................##...................#..#....#....#.........#.......#.....................................#..............
|
||||
........#...................#.......#.........................................#.........#........#....................#...........
|
||||
................................................................#.......#......#...........#................#.....................
|
||||
...........................................#.............#...........##.#................................#...................#....
|
||||
............................#......#........#...#.................................................................................
|
||||
.......#.............#...............................#.............................................#.............#.........#......
|
||||
......................................................#.........................#....#................................#...........
|
||||
...............#...........................................#..........#.........#..#..................#...........................
|
||||
.....................................##...#................................#..#......................#.......#..........#.........
|
||||
..............#.......#....................#.....................................................#.......#...................##..#
|
||||
...............................................#.............#..#...#.....#..................................................#....
|
||||
.....................................#........#...........................................................#......#................
|
||||
........##............#...............................#....#......................................................................
|
||||
.....#............#...................................................................#.............................#.............
|
||||
........#...............#......#..........#........#.....#........#..........#...............................................#..#.
|
||||
..................#.............#........#......#.................................................#..........................#....
|
||||
.................................#............#...............................................................#..##...............
|
||||
......................................#.#...........#........#.................................................................#..
|
||||
...........#...........#..............#..#.#...........#............................................#...#.....................#...
|
||||
....##......................#..........#..............#.............#.....#............................#....................#.....
|
||||
..................#...................#..........#............................................#...#.....................#.........
|
||||
.....................#...........#.........................................................#......................................
|
||||
.#..............#....#..#.#...##.........#....#.............#..........#.......#...#.............................#.........#...#..
|
||||
..................#...............#.....................#..#.....................#........#.......................................
|
||||
......#..#......#...#..................##.............#...................#.....#.....#................................#........#.
|
||||
....................#.#................#....#..................................................#............#................#....
|
||||
...........................#..#.#......#........................#......#..........................................................
|
||||
..#.#...............................................................#.#........................#.....................#..#.........
|
||||
...#..............................#......................................................#...#....................#.#.............
|
||||
....................#.......#...........#.....#.......................#........#...........................##.....................
|
||||
............#.........................................................#..............................................#.........#..
|
||||
..................#.#..............................#......#..................................#..........#......#..#...............
|
||||
....##................#.#..................#.....#...........................................#.......................##...........
|
||||
......#...........................#......#.......#..........#................#..#......#..........#..............#..#.............
|
||||
........#.................#...#.........................................#..........#.........#...................................#
|
||||
.#..........#....#.....#.............#...........#..................#.................#...#.......................................
|
||||
...........................................................#......#...#...........................................##........#....#
|
||||
............#.............................................................................#..........................#............
|
||||
.........#..............................................................................................#.........#.....#......#..
|
||||
.........#.......................................................................#........................#..#.....#.#............
|
||||
............................#.............#..........#..#...........#......#..............#..........................#............
|
||||
..#.#............#.........#.........#..................#.......................#............................................#....
|
||||
...#......................#......................................................#...........#..........................#.........
|
||||
.#....#...............................................................................................................#...........
|
||||
.#..#................#................................................................#....^.................#.............#......
|
||||
........................................................................................#.....................#...................
|
||||
........##................#.............................#.........................................................................
|
||||
.#.#.................#.....................#.....................#..........................#.................#...............#...
|
||||
........#....................................................................................................#....................
|
||||
##......#.............................#.......#........................................................................#.....##...
|
||||
..........#..........................................#.................#.....#............................................#.......
|
||||
......................#........................#.......................................#............#.............................
|
||||
.............................#.#.......................................................................................#..........
|
||||
...#.........#.....#........................#.................#...........#.....................#.................................
|
||||
.........#...........................................................................#...........................#................
|
||||
......#...#............#..........#........................#...................#...........#................................#.....
|
||||
.....#...#....#..........................................................#......................#.....................#..........#
|
||||
#.............#....................#...............................#.......#.#.............#.....................#.............#..
|
||||
............................................................#.......#...................#.................................#......#
|
||||
...#..#......................................#.........................................#..#.#.......##.......#............#..#....
|
||||
.....#.#...#...#.#................................................................................................................
|
||||
...............................................................................#........#...................#..#.........#....#...
|
||||
......#.........#.............#........................................................................................#.##.......
|
||||
.......................#...................................................................................................#......
|
||||
.........................................................#....................................#...................##.........#....
|
||||
.#..............#.#.#.............................#........................#........................#...................#.#.......
|
||||
.........#.....#..........................................................................#.................#.................#...
|
||||
.........#..............#...............................#.........#......#.#......................................................
|
||||
......................................................................................................#....#............#.......#.
|
||||
.....#.................#.......#.....#..................................#...............................................#.........
|
||||
...............................................................#.............#.................................................#..
|
||||
...#.....................................................................#...#.......#......#.....................................
|
||||
.................................#...#.#............................................................#...#.........................
|
||||
...........#..#.................................#....#...................#.............#.........#................................
|
||||
..................................................#..#...........#...........................#....................................
|
||||
.....#.....................................#......#......#...........................................................#............
|
||||
..............#..........................................#.........#.............#..#............................#................
|
||||
..........................................................................#..........#.......................#....................
|
||||
.......##................#................................................................................................#.......
|
||||
.#.....#.....#..................#............#......#............................#.........#......................................
|
||||
..##....#..................................................................................................................#......
|
||||
.......#......................#..................#...#.....................................#............#..............#..........
|
||||
...............................#................#...#.................................##......................#...................
|
||||
...............#..............................................................................................#.....##.......#....
|
||||
................................#..........#........................................#..#..........................................
|
||||
..................................................#.................................................................#.............
|
||||
....................#....#.....................#.................................#.........#.....#......#......................#..
|
||||
................#.............#............#................#........................................................#..........#.
|
||||
.#.......#......##...................#....#..............................................................#.................#......
|
||||
.........#.#............................................................................#........................#................
|
||||
...............#........##.....#.....................................#..#...........#......#......................................
|
||||
......#.............................................###..#.........#..............#...........................#.......#...........
|
||||
.....................................#.........#...........................................................##.....................
|
||||
.#....#.......................#.........#................................................................................#..#.....
|
||||
....#..#.......................................................................................................##............#....
|
||||
..#...................................#....#......#....................#...............................#..........................
|
||||
...................#....##........................................##..........................................#...................
|
||||
..........#.........#.............................................................#..#.........#...#............#.......#..#......
|
||||
....#...........#...##.........................#......................#.........#..#..............................................
|
||||
....................#.....#.....................................#...............................................................#.
|
||||
.........#.......................#.................#...#....................................................#.#......#........#...
|
||||
.................#.................................#..#..............#..........#...#.........#........#.##....##.................
|
||||
.............#...........................#......................#.......................#.........................................
|
||||
...............#.....#......#........#....#.......................................#.............................#.................
|
||||
.............#.....##.........#...#...............................................................................................
|
||||
.................................................................................#.............#.....#...#..#.....................
|
||||
.................................#......#.#...#.......#......................................#......#..........................#..
|
||||
#..#....................................#..#......................................................................................
|
||||
...#......#.......................#..........................#...........#.#................#.#.......#...........................
|
||||
#....#...............#..........................#....................#....#................................#............##........
|
||||
...........#........................#..........#......................................#...................................#.....#.
|
||||
......#................................#................#.............................#.........#...#........#....................
|
||||
.............#................#...........#.#...........#.......................................#...........#.#...................
|
||||
.....#......................#..........................#.................................#.............#............#....#........
|
||||
.....#.........#.#..............................................................................#...................##............
|
||||
......#.....#..#.............#...............#......#..#.#.................................#...............#...#..................
|
||||
....................#.......................#...................#........................#...................#..#.....##..........
|
||||
...............#...........#..#...........................................#........................#....#.........................
|
||||
.....................................#...................#.#............#......................................#..................
|
||||
.....#......................#.#....................#.............................................#...........................#..#.
|
||||
..........#........#................#.........#...........................................#....#..#...........#..####..........#..
|
||||
Reference in New Issue
Block a user