2022-12-03 05:55:49 +00:00
|
|
|
namespace AOC2015;
|
2022-11-11 18:42:42 +00:00
|
|
|
|
|
|
|
/// <summary>
|
2022-12-03 05:41:38 +00:00
|
|
|
/// Day 18: <a href="https://adventofcode.com/2015/day/18"/>
|
2022-11-11 18:42:42 +00:00
|
|
|
/// </summary>
|
2023-09-20 18:38:39 +00:00
|
|
|
public sealed class Day18() : Day(2015, 18, "Like a GIF For Your Yard")
|
2022-11-11 18:42:42 +00:00
|
|
|
{
|
2023-09-20 18:46:05 +00:00
|
|
|
private bool[][]? _lights;
|
2023-09-20 18:38:39 +00:00
|
|
|
|
|
|
|
public override void ProcessInput()
|
2022-11-11 18:42:42 +00:00
|
|
|
{
|
2023-09-20 18:38:39 +00:00
|
|
|
var input = Input.ToArray();
|
|
|
|
_lights = Enumerable.Range(0, 102).Select(_ => new bool[102]).ToArray();
|
|
|
|
for (var i = 0; i < 100; i++)
|
|
|
|
for (var j = 0; j < 100; j++)
|
|
|
|
_lights[i + 1][j + 1] = input[i][j] == '#';
|
2022-11-11 18:42:42 +00:00
|
|
|
}
|
2023-09-20 18:38:39 +00:00
|
|
|
|
|
|
|
private static bool[][] DoStep(bool[][] lights)
|
2022-12-08 19:40:40 +00:00
|
|
|
{
|
2023-09-20 18:38:39 +00:00
|
|
|
var nextGrid = Enumerable.Range(0, 102).Select(_ => new bool[102]).ToArray();
|
|
|
|
for (var i = 1; i < 101; i++)
|
|
|
|
{
|
|
|
|
for (var j = 1; j < 101; j++)
|
|
|
|
{
|
|
|
|
var activeNeighbors = new[]
|
|
|
|
{
|
|
|
|
lights[i - 1][j - 1],
|
|
|
|
lights[i - 1][j],
|
|
|
|
lights[i - 1][j + 1],
|
|
|
|
lights[i][j - 1],
|
|
|
|
lights[i][j + 1],
|
|
|
|
lights[i + 1][j - 1],
|
|
|
|
lights[i + 1][j],
|
|
|
|
lights[i + 1][j + 1]
|
|
|
|
}.Count(n => n);
|
|
|
|
|
|
|
|
nextGrid[i][j] = lights[i][j] ? activeNeighbors is 2 or 3 : activeNeighbors == 3;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nextGrid;
|
2022-12-08 19:40:40 +00:00
|
|
|
}
|
2022-11-11 18:42:42 +00:00
|
|
|
|
2023-09-20 18:38:39 +00:00
|
|
|
public override object Part1()
|
|
|
|
{
|
2023-09-20 18:46:05 +00:00
|
|
|
for (var i = 0; i < 100; i++) _lights = DoStep(_lights!);
|
|
|
|
return _lights!.Sum(l => l.Count(x => x));
|
2023-09-20 18:38:39 +00:00
|
|
|
}
|
2022-11-11 18:42:42 +00:00
|
|
|
|
2023-09-20 18:38:39 +00:00
|
|
|
public override object Part2()
|
|
|
|
{
|
|
|
|
ProcessInput();
|
|
|
|
for (var i = 0; i < 100; i++)
|
|
|
|
{
|
2023-09-20 18:46:05 +00:00
|
|
|
_lights = DoStep(_lights!);
|
2023-09-20 18:38:39 +00:00
|
|
|
_lights[1][1] = _lights[1][100] = _lights[100][1] = _lights[100][100] = true;
|
|
|
|
}
|
|
|
|
|
2023-09-20 18:46:05 +00:00
|
|
|
return _lights!.Sum(l => l.Count(x => x));
|
2023-09-20 18:38:39 +00:00
|
|
|
}
|
2024-05-10 22:06:37 +00:00
|
|
|
}
|