public int Get(string input) { var used = 0; for (var row = 0; row < 128; row++) { var knotHash = new Day10Star2().Get($"{input}-{row}"); var bitArray = ConvertHexToBitArray(knotHash); for (var i = 0; i < bitArray.Count; i++) { if (bitArray[i]) { used++; } } } return(used); }
public int Get(string input) { var bitArrays = new List <BitArray>(); for (var row = 0; row < 128; row++) { var knotHash = new Day10Star2().Get($"{input}-{row}"); var bitArray = ConvertHexToBitArray(knotHash); bitArrays.Add(bitArray); } var regions = new List <Region>(); for (var row = 0; row < bitArrays.Count; row++) { for (var column = 0; column < bitArrays[row].Count; column++) { if (bitArrays[row][column]) { var existing = regions.FirstOrDefault(r => r.Coordinates.Any(c => c.X == column && c.Y == row)); if (existing == null) { existing = new Region(); existing.Coordinates.Add(new Coordinate { X = column, Y = row }); regions.Add(existing); } for (var i = column + 1; i < bitArrays[row].Count; i++) { // search right if (bitArrays[row][i]) { TryMerge(regions, existing, i, row); existing.Coordinates.Add(new Coordinate { X = i, Y = row }); } else { break; } } for (var i = row + 1; i < bitArrays.Count; i++) { // search down if (bitArrays[i][column]) { TryMerge(regions, existing, column, i); existing.Coordinates.Add(new Coordinate { X = column, Y = i }); } else { break; } } } } } return(regions.Count); }