2022-12-03 05:55:49 +00:00
|
|
|
namespace AOC2019;
|
2022-10-27 15:42:05 +00:00
|
|
|
|
|
|
|
public sealed class Day19 : Day
|
|
|
|
{
|
|
|
|
private readonly long[,] _grid;
|
|
|
|
private readonly IntCodeVM _vm;
|
|
|
|
|
2022-10-27 16:36:21 +00:00
|
|
|
public Day19() : base(2019, 19, "Tractor Beam")
|
2022-10-27 15:42:05 +00:00
|
|
|
{
|
|
|
|
_vm = new(Input.First());
|
|
|
|
_grid = new long[50, 50];
|
|
|
|
}
|
|
|
|
|
2022-12-04 04:51:51 +00:00
|
|
|
public override object Part1()
|
2022-10-27 15:42:05 +00:00
|
|
|
{
|
|
|
|
for (var x = 0; x < 50; x++)
|
|
|
|
for (var y = 0; y < 50; y++)
|
|
|
|
{
|
|
|
|
_vm.Reset();
|
|
|
|
_vm.Run(x, y);
|
|
|
|
_grid[x, y] = _vm.Result;
|
|
|
|
}
|
|
|
|
|
2022-12-04 04:51:51 +00:00
|
|
|
return _grid.Cast<long>().Sum();
|
2022-10-27 15:42:05 +00:00
|
|
|
}
|
|
|
|
|
2022-12-04 04:51:51 +00:00
|
|
|
public override object Part2()
|
2022-10-27 15:42:05 +00:00
|
|
|
{
|
|
|
|
for (int x = 101, y = 0; ; x++)
|
|
|
|
{
|
|
|
|
while (true)
|
|
|
|
{
|
|
|
|
_vm.Reset();
|
|
|
|
_vm.Run(x, y);
|
|
|
|
if (_vm.Result == 1) break;
|
|
|
|
y++;
|
|
|
|
}
|
|
|
|
|
|
|
|
_vm.Reset();
|
|
|
|
_vm.Run(x - 99, y + 99);
|
|
|
|
if (_vm.Result == 1)
|
2022-12-04 04:51:51 +00:00
|
|
|
return (x - 99) * 1e4 + y;
|
2022-10-27 15:42:05 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|