public ulong part_one(string input) { var numbers = input.Lines(BinaryNumber.Parse).ToArray(); var size = numbers[0].Size; var threshold = numbers.Length / 2; var gamma = BinaryNumber.Empty(size); var epsilon = BinaryNumber.Empty(size); for (var position = 0; position < size; position++) { var ones = numbers.Count(line => line.HasFlag(position)); if (ones > threshold) { gamma = gamma.Flag(position); } else { epsilon = epsilon.Flag(position); } } return(gamma.Value * epsilon.Value); }