private void DoPart1(string input) { var hexagonInstructions = ParseInput(input); foreach (var hexagonInstruction in hexagonInstructions) { var coords = new HexagonCoordinate(0, 0); foreach (var instruction in hexagonInstruction.Instructions) { switch (instruction) { case HexagonInstructionDirection.East: coords.X += 2; break; case HexagonInstructionDirection.SouthEast: coords.X++; coords.Y--; break; case HexagonInstructionDirection.SouthWest: coords.X--; coords.Y--; break; case HexagonInstructionDirection.West: coords.X -= 2; break; case HexagonInstructionDirection.NorthWest: coords.X--; coords.Y++; break; case HexagonInstructionDirection.NorthEast: coords.X++; coords.Y++; break; default: throw new ArgumentOutOfRangeException(); } } if (_hexagonCoords.ContainsKey(coords)) { _hexagonCoords[coords] = !_hexagonCoords[coords]; } else { _hexagonCoords.Add(coords, true); } } }
private int GetNeighbouringBlackTiles(Dictionary <HexagonCoordinate, bool> hexCoords, HexagonCoordinate coordinates) { var blackTilesFound = 0; for (var j = 0; j < 6; j++) { var coordCheck = coordinates.GetCoordDiff(_directionsToCheck[j]); if (hexCoords.ContainsKey(coordCheck)) { blackTilesFound += hexCoords[coordCheck] ? 1 : 0; } } return(blackTilesFound); }
public HexagonCoordinate GetCoordDiff(HexagonCoordinate coords) { return(new HexagonCoordinate(X + coords.X, Y + coords.Y)); }