AdventOfCode/AdventOfCode.Solutions/2023/Day 18/Day18.cs
2024-12-01 10:17:24 +01:00

77 lines
2.2 KiB
C#

using AdventOfCode.Core.Shared.IO;
namespace AdventOfCode.Solutions._2023
{
public class Day18 : IChallange
{
public int Year => 2023;
public int Day => 18;
private readonly IInputReader _inputReader;
public Day18(IInputReader inputReader)
{
_inputReader = inputReader;
_inputReader.SetInput(this);
}
public async Task<string> GetSolutionPart1()
{
Point digger = new (0, 0);
ISet<Point> set = new HashSet<Point>() { digger };
await foreach(string instructions in _inputReader.ReadAsStringLine())
{
string[] todo = instructions.Split(' ');
int length = int.Parse(todo[1]);
for(int i = 0; i < length; i++)
{
switch(todo[0])
{
case "U": digger = digger.MoveUp(); break;
case "D": digger = digger.MoveDown(); break;
case "L": digger = digger.MoveLeft(); break;
case "R": digger = digger.MoveRight(); break;
}
set.Add(digger);
}
}
int total = set.Count;
int movedOver = 0;
char prev = '.';
for(long row = set.Min(d => d.Y); row <= set.Max(d => d.Y); row++)
{
for(long column = set.Min(d => d.X); column <= set.Max(d => d.X); column++)
{
if (!set.Add(new(column, row)))
{
if (prev != '#')
movedOver++;
prev = '#';
continue;
}
if (movedOver % 2 == 1)
{
prev = '.';
total++;
}
}
movedOver = 0;
prev = '.';
}
return total.ToString();
}
public async Task<string> GetSolutionPart2()
{
return string.Empty;
}
}
}