71 lines
2.1 KiB
C#
71 lines
2.1 KiB
C#
namespace AdventOfCode.Solutions._2023
|
|
{
|
|
public class Day18(InputReader reader) : IChallange
|
|
{
|
|
private InputReader _inputReader = reader;
|
|
|
|
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 = '.';
|
|
//Console
|
|
|
|
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)))
|
|
{
|
|
//Console.Write('#');
|
|
if (prev != '#')
|
|
movedOver++;
|
|
|
|
prev = '#';
|
|
continue;
|
|
}
|
|
|
|
//Console.Write('.');
|
|
if (movedOver % 2 == 1)
|
|
{
|
|
|
|
prev = '.';
|
|
total++;
|
|
}
|
|
}
|
|
//Console.WriteLine();
|
|
movedOver = 0;
|
|
prev = '.';
|
|
}
|
|
|
|
return total.ToString();
|
|
}
|
|
|
|
public async Task<string> GetSolutionPart2()
|
|
{
|
|
return string.Empty;
|
|
}
|
|
|
|
|
|
}
|
|
} |