feat: Add day 7, thanks TG
This commit is contained in:
parent
5f74f2bffa
commit
b37717d05f
7 changed files with 406 additions and 33 deletions
16
AdventOfCode2025/Inputs/Day7_0.txt
Normal file
16
AdventOfCode2025/Inputs/Day7_0.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
.......S.......
|
||||||
|
...............
|
||||||
|
.......^.......
|
||||||
|
...............
|
||||||
|
......^.^......
|
||||||
|
...............
|
||||||
|
.....^.^.^.....
|
||||||
|
...............
|
||||||
|
....^.^...^....
|
||||||
|
...............
|
||||||
|
...^.^...^.^...
|
||||||
|
...............
|
||||||
|
..^...^.....^..
|
||||||
|
...............
|
||||||
|
.^.^.^.^.^...^.
|
||||||
|
...............
|
||||||
142
AdventOfCode2025/Inputs/Day7_1.txt
Normal file
142
AdventOfCode2025/Inputs/Day7_1.txt
Normal file
|
|
@ -0,0 +1,142 @@
|
||||||
|
......................................................................S......................................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
......................................................................^......................................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.....................................................................^.^.....................................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
....................................................................^.^.^....................................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...................................................................^.....^...................................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..................................................................^...^.^.^..................................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.................................................................^.^...^.^.^.................................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
................................................................^...^.^.^.^.^................................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...............................................................^.^.^.^.^.^.^.^...............................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..............................................................^.^...^.^.^.^...^..............................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.............................................................^.^.^.^.^.^.^.^.^.^.............................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
............................................................^.^.^.............^.^............................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...........................................................^.....^.....^.^.^.^.^.^...........................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..........................................................^...^.^.^.^.^...^.^.....^..........................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.........................................................^.^.^.^.^.....^.^.^.^.^.^.^.........................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
........................................................^.^...^.....^.^.^.^...^.^.^.^........................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.......................................................^.^.^.^.^.^.^.........^.^.^.^.^.......................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
......................................................^.^.^.......^.^.^.^.^...^.......^......................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.....................................................^.^.^.^.^.^.....^...^.^.^.^.^...^.^.....................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
....................................................^.^.^.....^...^.^...^.....^...^.^.^.^....................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...................................................^...^.^.^.....^.^.^.^.^...^.^.......^.^...................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..................................................^.^.^.^.^.^.^...^.^.....^.^.......^.^.^.^..................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.................................................^.^.^.^.^...^.^.^.^.^.^...^.......^.^.^.^.^.................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
................................................^.^.......^.^.^.^.......^.^.^.........^...^.^................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...............................................^.^.^.^.^.^.....^.^.^.^.^.^.^...^.....^.^.^...^...............................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..............................................^.........^.^...^.^.^.^.^.^.^.....^.....^.^.^.^.^..............................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.............................................^.^...^.^.^.^.^.^...^.^.......^.....^.......^.^.^.^.............................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
............................................^...^...^.^.^.^.^.^.....^.^...^.^.^.^.^.^.^.......^.^............................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...........................................^.^.^.^.^.^.^.^.......^.......^.^.^.......^.....^...^.^...........................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..........................................^.^.^.....^.....^...^.^.^.^...^.^.^.^...^.^.^.....^...^.^..........................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.........................................^...^.^.^.^...^.^.^...^.^.^...^.^...^.^...^.^.^.^.^...^...^.........................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
........................................^.^.^.^.^.^.^.......^.^.^.^...^.^...^.^.^.^.^.^.....^.^...^.^........................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.......................................^.^.^.^.^...^.^...^.^.^.^.....^...^.^.^.....^.^...^.^.^.^.....^.......................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
......................................^...^.^.^.^.^...^.^.^...^...^.^.^.^...^.^...^.^.^.......^...^.^.^......................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.....................................^.^...^.^.^...^.^.^.^.....^.^.^.^.^.^...^...^.^.^.....^...^.^.^.^.^.....................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
....................................^.^.^...^...^...^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.^...^.^...^.^.^.^.^.^....................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...................................^.^.....^.^.....^.......^.^.^.....^.......^.^.......^...^.^.^.^.^.^.^.^...................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..................................^.^...^.^...........^...^.^.^.^...^...^.^...^.^...^.^.^.^.^.^.^.^.^.^...^..................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.................................^.^.^.^.^...^.^.........^...^.^.........^...^.^.^.^.^.^.^.^.^.^.^.....^.^.^.................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
................................^.^.^.^.^.^.^.^.......^.....^.^.^...^...^...^.^.^...^.^.....^.^.^.......^.^.^................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...............................^.^.^...^...^.^.....^.^.^.^.^.....^...^.^.^.^.^.^.^.^.^.^...^.^.....^.^.......^...............................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..............................^.^.^.^.^.^...^.^.^.^.^...^.^.^.^.^...........^.^.^.^...^.....^.....^.....^.^...^..............................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.............................^...^.^.^.^.....^.....^...^...............^.....^.^...^...^.^.......^.^.^...^.^...^.............................
|
||||||
|
.............................................................................................................................................
|
||||||
|
............................^.^.^.......^.^.^.^.....^.^.^.^.^.^...^...^.^.........^.^.^.^.^.^.^.^...^.^.^.....^.^............................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...........................^.^.^.....^.^.......^...^.^.....^.^...^.^.^.^...^.^.^.^.^.^.^...^.^.^.^.....^.....^.^.^...........................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..........................^.^...^.^.^.^.....^...^...^.^.^...^.^.^.......^.^...^...^...^.^.^.^.^.^...^...^.^.......^..........................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.........................^.....^.^.^.....^.^.^...^...^.^.....^.^.^...^.^...^.^.^.^.^.^.^...^.^.......^.^.^...^.^...^.........................
|
||||||
|
.............................................................................................................................................
|
||||||
|
........................^.^.....^.......^.^.^.^.^.^.^.......^.^.^.^...^...^.^.^...^...^.^.^.^.^.....^.^.^.^...^...^.^........................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.......................^.^.^.^.^...^...^.^.....^.^.^.^...^.^.^.^.^.^.^.^.^.^...^...^.^.^.^.^.^.^.^.^...^.^.....^.^.^.^.......................
|
||||||
|
.............................................................................................................................................
|
||||||
|
......................^...^...^...^...^.^.^.^...^.^.^.....^.^.^.^.^.^.^.....^...^.^.^.....^...........^...^...^.^...^.^......................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.....................^.^.^.^.^.^...^.^.^...^.^.^...^.^...^.....^.^.^.^.^.^.^.^.^...^.^.^.....^.^...^.^.^.^...^.^.^.^.^.^.....................
|
||||||
|
.............................................................................................................................................
|
||||||
|
....................^...^.........^.^...^...^...^...^.^...^.^.^...^.^.^...............^...^.....^.......^.........^.^.^.^....................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...................^.^.^.^.^.......^.^.^.^.^.....^.......^.^.^...^...^.^.^...^.^.^.^.^.^.^.^.^.......^.^.^.^.^.^.^.....^.^...................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..................^.........^...^...^...^.^.^.^.^...^.^...^.^.....^.....^.^.^.^.^.....^...^.^.^...^.^...^.^.^.....^.......^..................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.................^.^.^.^.^.^...^.^...^.....^.^...^.^.^.^.^.^.^.^.^...^.^.^.^.....^.^.^.....^...^...^...^...^.^.....^...^...^.................
|
||||||
|
.............................................................................................................................................
|
||||||
|
................^.^.^.^...^.^.^.^.^...^.^.^.^.^.^...^...^...^...^.^.^.^.^.^.^.^.....^.^.^...^...^.^.^.^...^.^.^.^.^.^.^.^.^.^................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...............^...^.^.^.^.^...^.^.^...^.^.^.^.^.^.^.^...^.^...^...^.^.^.^...^...^.^.^.^...^...^.....^.^...^.^.^.^.^.....^.^.^...............
|
||||||
|
.............................................................................................................................................
|
||||||
|
..............^...^...^.^.^.^...^.^...^...^.....^...^...^.^...^...^...^.^...^...^.^...^.^...^...^.^.^.....^.^...^.........^...^..............
|
||||||
|
.............................................................................................................................................
|
||||||
|
.............^.^.^...^.....^.^.^.....^.....^.......^...^.^.^...^.^.^.^.^...^...^.^.^.^...^.^...^.^.^...^...^.^.^...^.^.^...^...^.............
|
||||||
|
.............................................................................................................................................
|
||||||
|
............^.......^.^.^.^.^.......^.^.^.^.^.^.^.^.^.^.^.^.....^...^.^.^.^.^.^.^.^.........^...^.^.^.^.^.^.....^.^.^...^.^.^...^............
|
||||||
|
.............................................................................................................................................
|
||||||
|
...........^.^.^...^.^.^.^.^.^...^.^.^.^.^.^.^.^.^.^...^...^.^.^.^.^.^.^.^.....^.^.^.^...^...^.^.^.....^.^.....^.^.^.^.^...^...^.^...........
|
||||||
|
.............................................................................................................................................
|
||||||
|
..........^.^.^...^.^.^.^.^.^...^.^.^.....^.^.^.^...^...^.^.^.^.^.^.^.^.^.^.....^.^.^...^.^.^.^.^...^.....^.^.......^.^.^.....^...^..........
|
||||||
|
.............................................................................................................................................
|
||||||
|
.........^...^...^.^...^.^.^.^.^.^.^.^.....^.^...^...^...^.^.....^...^.^.^.^...^.^.^.^.^...^.^.^.........^.^.^.^.....^.....^...^...^.........
|
||||||
|
.............................................................................................................................................
|
||||||
|
........^.^...^...^.....^.^.^.^.^...^.^.^.^.....^.^...^.^.^.^.^...^.^...^...^.^.^.......^.......^.^.^.^.^...^.^.^.....^...^.^.....^.^........
|
||||||
|
.............................................................................................................................................
|
||||||
|
.......^.^.^.^.^.^.^.^.^...^.^.^.^.^.....^...^.....^.^.^...^.....^...^.....^.^...^.^.^.^.^.^.^.....^.^.^.^.^.....^.^...^.^.^.^...^.^.^.......
|
||||||
|
.............................................................................................................................................
|
||||||
|
......^.^...^.^.^.^.........^.^.....^.^.^.^...^.^.^.^.^.^...^...^.^.^.^.......^.^.^...^...^.^.^.^...........^.^.^...^.^.^...^.^.^.^.^.^......
|
||||||
|
.............................................................................................................................................
|
||||||
|
.....^.^.^.^.^.^.^.^.^.^.......^.^.^.....^.^.^.^.^...^...^.^...^.^.^.^.^.^.^.^...^.^...^.^.^...^...^.^.^.^.^.....^.^.^.^.^...^.^...^...^.....
|
||||||
|
.............................................................................................................................................
|
||||||
|
....^...^.^.^.^.^.^.^.^...^.^...^...^.^.^.^.....^.^.^.^.....^.^.^.^.^...^.^.^...^.^.^.^.^.^.....^.^.^.^...^...^.^.....^.^.^...^.^.^.^.^.^....
|
||||||
|
.............................................................................................................................................
|
||||||
|
...^.^.^.^.^...^.^.^...^.^.^.^.^...^.^.^...^.^...^.^...^.^.^.^.^.^.^...^...^.^.^.^...^...^.^...^...^.^.^.^.^.^.^.^...^.^.^...^.^...^.^...^...
|
||||||
|
.............................................................................................................................................
|
||||||
|
..^.^.^.^.....^.........^...^.....^...^.....^.^.^.....^...^.^.^.^.^...^.^.^.^.^...^.....^.^...^.^...^.^.^...^.^.^.^.....^.^.^...^.^...^.^.^..
|
||||||
|
.............................................................................................................................................
|
||||||
|
.^.^.^.^.^.....^.^.^.^.^.^.....^...^...^.^.^.^...^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.^...^.^...^.....^.....^.^.^...^.^.^.^.^...^.^.^.
|
||||||
|
.............................................................................................................................................
|
||||||
|
|
@ -4,5 +4,5 @@ public sealed record Input(int Day, int PartNumber = 1)
|
||||||
{
|
{
|
||||||
private const string BasePath = "../../../Inputs/";
|
private const string BasePath = "../../../Inputs/";
|
||||||
private string ToPath() => BasePath + $"Day{Day}_{PartNumber}.txt";
|
private string ToPath() => BasePath + $"Day{Day}_{PartNumber}.txt";
|
||||||
public IEnumerable<string> Lines => field ??= File.ReadAllLines(ToPath());
|
public List<string> Lines => field ??= File.ReadAllLines(ToPath()).ToList();
|
||||||
}
|
}
|
||||||
|
|
@ -10,9 +10,9 @@ public sealed class Day1() : Solution(1)
|
||||||
{
|
{
|
||||||
var arrow = 50;
|
var arrow = 50;
|
||||||
var zeroCounter = 0;
|
var zeroCounter = 0;
|
||||||
foreach (string line in Input.Lines)
|
foreach (var line in Input.Lines)
|
||||||
{
|
{
|
||||||
int number = int.Parse(line[1..]);
|
var number = int.Parse(line[1..]);
|
||||||
arrow = line.First() switch
|
arrow = line.First() switch
|
||||||
{
|
{
|
||||||
'L' => arrow - number,
|
'L' => arrow - number,
|
||||||
|
|
@ -35,13 +35,13 @@ public sealed class Day1() : Solution(1)
|
||||||
var arrow = 50;
|
var arrow = 50;
|
||||||
var zeroCounter = 0;
|
var zeroCounter = 0;
|
||||||
|
|
||||||
foreach (string line in Input.Lines)
|
foreach (var line in Input.Lines)
|
||||||
{
|
{
|
||||||
int number = int.Parse(line[1..]);
|
var number = int.Parse(line[1..]);
|
||||||
zeroCounter += number / MaxArrow;
|
zeroCounter += number / MaxArrow;
|
||||||
int remainingNumber = number % MaxArrow;
|
var remainingNumber = number % MaxArrow;
|
||||||
|
|
||||||
int end = line.First() switch
|
var end = line.First() switch
|
||||||
{
|
{
|
||||||
'L' => arrow - remainingNumber,
|
'L' => arrow - remainingNumber,
|
||||||
'R' => arrow + remainingNumber,
|
'R' => arrow + remainingNumber,
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,8 @@ public class Day2() : Solution(2)
|
||||||
|
|
||||||
private static IEnumerable<long> GetIds(string from, string to)
|
private static IEnumerable<long> GetIds(string from, string to)
|
||||||
{
|
{
|
||||||
long current = long.Parse(from);
|
var current = long.Parse(from);
|
||||||
long end = long.Parse(to);
|
var end = long.Parse(to);
|
||||||
while (current <= end)
|
while (current <= end)
|
||||||
{
|
{
|
||||||
yield return current;
|
yield return current;
|
||||||
|
|
@ -53,8 +53,8 @@ public class Day2() : Solution(2)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
string testBlock = input[..subLength];
|
var testBlock = input[..subLength];
|
||||||
string theoreticalString = string.Concat(Enumerable.Repeat(testBlock, input.Length / subLength));
|
var theoreticalString = string.Concat(Enumerable.Repeat(testBlock, input.Length / subLength));
|
||||||
if (theoreticalString == input)
|
if (theoreticalString == input)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -77,7 +77,7 @@ public class Day2() : Solution(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
var firstHalfIndex = 0;
|
var firstHalfIndex = 0;
|
||||||
int secondHalfIndex = input.Length / 2;
|
var secondHalfIndex = input.Length / 2;
|
||||||
while (secondHalfIndex < input.Length)
|
while (secondHalfIndex < input.Length)
|
||||||
{
|
{
|
||||||
if (input[firstHalfIndex] != input[secondHalfIndex])
|
if (input[firstHalfIndex] != input[secondHalfIndex])
|
||||||
|
|
@ -94,7 +94,7 @@ public class Day2() : Solution(2)
|
||||||
|
|
||||||
private static (string from, string to) ToLimit(string range)
|
private static (string from, string to) ToLimit(string range)
|
||||||
{
|
{
|
||||||
string[] parts = range.Split('-');
|
var parts = range.Split('-');
|
||||||
return (parts[0], parts[1]);
|
return (parts[0], parts[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ public class Day4() : Solution(4)
|
||||||
|
|
||||||
public override string SolvePart1()
|
public override string SolvePart1()
|
||||||
{
|
{
|
||||||
char[][] grid = PaddingField(Input.Lines)
|
var grid = PaddingField(Input.Lines)
|
||||||
.Select(line => line.ToCharArray())
|
.Select(line => line.ToCharArray())
|
||||||
.ToArray();
|
.ToArray();
|
||||||
|
|
||||||
|
|
@ -18,7 +18,7 @@ public class Day4() : Solution(4)
|
||||||
|
|
||||||
public override string SolvePart2()
|
public override string SolvePart2()
|
||||||
{
|
{
|
||||||
char[][] grid = PaddingField(Input.Lines)
|
var grid = PaddingField(Input.Lines)
|
||||||
.Select(line => line.ToCharArray())
|
.Select(line => line.ToCharArray())
|
||||||
.ToArray();
|
.ToArray();
|
||||||
List<(int, int)> paperCanBeRemoved;
|
List<(int, int)> paperCanBeRemoved;
|
||||||
|
|
@ -27,12 +27,11 @@ public class Day4() : Solution(4)
|
||||||
{
|
{
|
||||||
paperCanBeRemoved = GetRemovablePaper(grid).ToList();
|
paperCanBeRemoved = GetRemovablePaper(grid).ToList();
|
||||||
paperCount += paperCanBeRemoved.Count;
|
paperCount += paperCanBeRemoved.Count;
|
||||||
foreach ((int row, int col) in paperCanBeRemoved)
|
foreach (var (row, col) in paperCanBeRemoved)
|
||||||
{
|
{
|
||||||
grid[row][col] = NoneChar;
|
grid[row][col] = NoneChar;
|
||||||
}
|
}
|
||||||
}
|
} while (paperCanBeRemoved.Count > 0);
|
||||||
while (paperCanBeRemoved.Count > 0);
|
|
||||||
|
|
||||||
return paperCount.ToString();
|
return paperCount.ToString();
|
||||||
}
|
}
|
||||||
|
|
@ -59,22 +58,12 @@ public class Day4() : Solution(4)
|
||||||
|
|
||||||
private static bool HasMorePaperNeighborsAs(int x, int y, int threshold, char[][] grid)
|
private static bool HasMorePaperNeighborsAs(int x, int y, int threshold, char[][] grid)
|
||||||
{
|
{
|
||||||
var directions = new (int dx, int dy)[]
|
var directions = new (int dx, int dy)[] { (-1, -1), (0, -1), (1, -1), (-1, 0), (1, 0), (0, 1), (-1, 1), (1, 1) };
|
||||||
{
|
|
||||||
(-1, -1),
|
|
||||||
(0, -1),
|
|
||||||
(1, -1),
|
|
||||||
(-1, 0),
|
|
||||||
(1, 0),
|
|
||||||
(0, 1),
|
|
||||||
(-1, 1),
|
|
||||||
(1, 1)
|
|
||||||
};
|
|
||||||
var paperNeighbors = 0;
|
var paperNeighbors = 0;
|
||||||
foreach ((int dx, int dy) in directions)
|
foreach (var (dx, dy) in directions)
|
||||||
{
|
{
|
||||||
int nx = x + dx;
|
var nx = x + dx;
|
||||||
int ny = y + dy;
|
var ny = y + dy;
|
||||||
if (nx < 0 || nx >= grid[0].Length || ny < 0 || ny >= grid.Length)
|
if (nx < 0 || nx >= grid[0].Length || ny < 0 || ny >= grid.Length)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -98,7 +87,7 @@ public class Day4() : Solution(4)
|
||||||
private IEnumerable<string> PaddingField(IEnumerable<string> field)
|
private IEnumerable<string> PaddingField(IEnumerable<string> field)
|
||||||
{
|
{
|
||||||
List<string> lines = field.ToList();
|
List<string> lines = field.ToList();
|
||||||
int width = lines.First().Length;
|
var width = lines.First().Length;
|
||||||
lines.Insert(0, new string(NoneChar, width));
|
lines.Insert(0, new string(NoneChar, width));
|
||||||
lines.Add(new string(NoneChar, width));
|
lines.Add(new string(NoneChar, width));
|
||||||
return lines.Select(l => NoneChar + l + NoneChar);
|
return lines.Select(l => NoneChar + l + NoneChar);
|
||||||
|
|
|
||||||
226
AdventOfCode2025/Solutions/Day7.cs
Normal file
226
AdventOfCode2025/Solutions/Day7.cs
Normal file
|
|
@ -0,0 +1,226 @@
|
||||||
|
// using System.Collections.Concurrent;
|
||||||
|
using System.Numerics;
|
||||||
|
|
||||||
|
namespace AdventOfCode2025.Solutions;
|
||||||
|
|
||||||
|
public class Day7() : Solution(7)
|
||||||
|
{
|
||||||
|
private const char Free = '.';
|
||||||
|
private const char Start = 'S';
|
||||||
|
private const char Split = '^';
|
||||||
|
private const char Beam = '|';
|
||||||
|
// private readonly ConcurrentStack<(int row, int col)> stack = new();
|
||||||
|
// private readonly AutoResetEvent hasWork = new(false);
|
||||||
|
private char[][] field = null!;
|
||||||
|
// private int counter = 0;
|
||||||
|
|
||||||
|
public override string SolvePart1()
|
||||||
|
{
|
||||||
|
SetupField();
|
||||||
|
int indexOfS = field[0].IndexOf(Start);
|
||||||
|
int count = FirePart1(1, indexOfS);
|
||||||
|
return count.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Row by row count on which cell how many timeline passes...
|
||||||
|
|
||||||
|
.S..
|
||||||
|
..^.
|
||||||
|
.^..
|
||||||
|
|
||||||
|
dp[0] = [0, 1, 0, 0]
|
||||||
|
dp[1] = [0, 1, 0, 0]
|
||||||
|
|
||||||
|
dp[1] = [0, 1, 0, 0]
|
||||||
|
dp[2] = [0, 1, 0, 0]
|
||||||
|
|
||||||
|
dp[2] = [0, 1, 0, 0] // Split on (2,1)
|
||||||
|
// Left -> dp[2][0] += 1
|
||||||
|
// Right -> dp[2][2] += 1
|
||||||
|
dp[2] = [1, 0, 1, 0]
|
||||||
|
|
||||||
|
// Count dp[2] => number of timelines
|
||||||
|
*/
|
||||||
|
public override string SolvePart2()
|
||||||
|
{
|
||||||
|
SetupField();
|
||||||
|
int height = field.Length;
|
||||||
|
int width = field[0].Length;
|
||||||
|
|
||||||
|
var downwardPropagation = new BigInteger[height][];
|
||||||
|
for (var i = 0; i < height; i++)
|
||||||
|
{
|
||||||
|
downwardPropagation[i] = new BigInteger[width];
|
||||||
|
}
|
||||||
|
|
||||||
|
int startCol = field[0].IndexOf(Start);
|
||||||
|
downwardPropagation[0][startCol] = 1;
|
||||||
|
|
||||||
|
for (var row = 0; row < height; row++)
|
||||||
|
{
|
||||||
|
// downward propagation
|
||||||
|
if (row > 0)
|
||||||
|
{
|
||||||
|
for (var col = 0; col < width; col++)
|
||||||
|
{
|
||||||
|
downwardPropagation[row][col] += downwardPropagation[row - 1][col];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var changed = true;
|
||||||
|
while (changed)
|
||||||
|
{
|
||||||
|
changed = false;
|
||||||
|
for (var col = 0; col < width; col++)
|
||||||
|
{
|
||||||
|
if (field[row][col] != Split || downwardPropagation[row][col] <= 0)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
BigInteger x = downwardPropagation[row][col];
|
||||||
|
downwardPropagation[row][col] = 0;
|
||||||
|
|
||||||
|
if (col > 0)
|
||||||
|
{
|
||||||
|
downwardPropagation[row][col - 1] += x;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (col + 1 < width)
|
||||||
|
{
|
||||||
|
downwardPropagation[row][col + 1] += x;
|
||||||
|
}
|
||||||
|
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// final timelines = count on last row
|
||||||
|
BigInteger result = downwardPropagation[height - 1].Aggregate(BigInteger.Zero, (a, b) => a + b);
|
||||||
|
return result.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
// public string SolvePart2_Iterative() // Does take too much tim
|
||||||
|
// {
|
||||||
|
// SetupField();
|
||||||
|
// int indexOfS = field[0].IndexOf(Start);
|
||||||
|
// stack.Push((1, indexOfS));
|
||||||
|
// int workerCount = Environment.ProcessorCount;
|
||||||
|
// var workers = new Task[workerCount];
|
||||||
|
// var idleWorkersLock = new Lock();
|
||||||
|
// int idleWorker = workerCount;
|
||||||
|
//
|
||||||
|
// for (var i = 0; i < workerCount; i++)
|
||||||
|
// {
|
||||||
|
// int workerId = i;
|
||||||
|
// workers[i] = Task.Run(() =>
|
||||||
|
// {
|
||||||
|
// var isIdle = true;
|
||||||
|
// while (true)
|
||||||
|
// {
|
||||||
|
// if (stack.TryPop(out (int row, int col) data))
|
||||||
|
// {
|
||||||
|
// if (isIdle)
|
||||||
|
// {
|
||||||
|
// isIdle = false;
|
||||||
|
// lock (idleWorkersLock)
|
||||||
|
// {
|
||||||
|
// idleWorker--;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Console.WriteLine($"Worker {workerId}: started, Idle workers: {idleWorker}");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// FirePart2Worker(data.row, data.col);
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// if (!isIdle)
|
||||||
|
// {
|
||||||
|
// isIdle = true;
|
||||||
|
// lock (idleWorkersLock)
|
||||||
|
// {
|
||||||
|
// idleWorker++;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Console.WriteLine($"Worker {workerId}: done, Idle workers: {idleWorker}");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// lock (idleWorkersLock)
|
||||||
|
// {
|
||||||
|
// if (idleWorker == workerCount)
|
||||||
|
// {
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// hasWork.WaitOne();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Task.WaitAll(workers);
|
||||||
|
// return counter.ToString();
|
||||||
|
// }
|
||||||
|
|
||||||
|
private void SetupField()
|
||||||
|
{
|
||||||
|
field = Input
|
||||||
|
.Lines
|
||||||
|
.Where(line => line.Contains(Start) || line.Contains(Split))
|
||||||
|
.Select(line => line.ToCharArray())
|
||||||
|
.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
private int FirePart1(int row, int col)
|
||||||
|
{
|
||||||
|
if (field[row][col] == Beam)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (row <= field.Length - 1 && field[row][col] == Free)
|
||||||
|
{
|
||||||
|
field[row][col] = Beam;
|
||||||
|
row++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (row > field.Length - 1)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (field[row][col] == Split)
|
||||||
|
{
|
||||||
|
return 1 + FirePart1(row, col + 1) + FirePart1(row, col - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// private void FirePart2Worker(int row, int col)
|
||||||
|
// {
|
||||||
|
// while (row < field.Length)
|
||||||
|
// {
|
||||||
|
// if (field[row][col] == Split)
|
||||||
|
// {
|
||||||
|
// int left = col - 1;
|
||||||
|
// int right = col + 1;
|
||||||
|
// row++;
|
||||||
|
//
|
||||||
|
// stack.Push((row, right));
|
||||||
|
// hasWork.Set();
|
||||||
|
// col = left;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// row++;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Interlocked.Increment(ref counter);
|
||||||
|
// }
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue