Files
advent-of-code-2025/csharp/adventOfCode/day12/Day12.cs
T
2026-01-02 12:01:29 -05:00

99 lines
2.1 KiB
C#

namespace adventOfCode.day12;
record Pin(int X, int Y);
class Block
{
private HashSet<Pin> Pins;
public Block(HashSet<Pin> pins)
{
Pins = pins;
}
public static Block CreateBlock(string blockSection)
{
blockSection = blockSection.Replace("\n", "");
var pins = new HashSet<Pin>(9);
for (var i = 0; i < 3; i++)
{
for (var j = 0; j < 3; j++)
{
if (blockSection[3 *i + j] == '#')
{
pins.Add(new Pin(i, j));
}
}
}
return new Block(pins);
}
public override string ToString()
{
var ret = "";
for (var i = 0; i < 3; i++)
{
for (var j = 0; j < 3; j++)
{
ret += Pins.Contains(new Pin(i, j)) ? "#" : ".";
}
ret += "\n";
}
return ret;
}
public Block Flip()
{
return new Block((from pin in Pins select new Pin(pin.Y, pin.X)).ToHashSet());
}
};
public class Day12
{
private static string GetBlockSections(string document)
{
var xIndex = document.IndexOf("x");
var index = -1;
while (true)
{
var newIndex = document.IndexOf("\n", index + 1);
if (newIndex > xIndex)
{
return document.Substring(0, index -1);
}
index = newIndex;
}
}
static string ToBlockString(string blockSection)
{
return blockSection.Substring(blockSection.IndexOf("\n"));
}
static List<Block> ParseBlocks(string document)
{
var blockSections = GetBlockSections(document).Split("\n\n");
return (from blockSection in blockSections select Block.CreateBlock(ToBlockString(blockSection))).ToList();
}
public static void Main(string[] args)
{
var b = Block.CreateBlock("###\n##.\n##.");
Console.WriteLine(b);
Console.WriteLine("\n\n\n");
Console.WriteLine(b.Flip());
Console.WriteLine("\n\n\n");
Console.WriteLine(b.Flip().Flip());
}
}