Esempio n. 1
0
    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);
    }