Exemplo n.º 1
0
        private static void Part2(string[] instructions)
        {
            Dictionary <long, long> memorySpace = new();

            MaskEnum[] mask = new MaskEnum[Size];

            foreach (var line in instructions)
            {
                if (line.StartsWith("mask"))
                {
                    mask = ParseMask(line);
                }
                else if (line.StartsWith("mem"))
                {
                    (var pos, var value) = ParseMemoryLine(line);

                    SetMemoryAddresses(pos, mask, memorySpace, value);
                }
                else
                {
                    throw new Exception($"Operation not supported: {line}");
                }
            }

            var sum = memorySpace.Sum(kv => kv.Value);

            Console.WriteLine($"Sum:{sum}");
        }
Exemplo n.º 2
0
        private static void Part1(string[] instructions)
        {
            Dictionary <long, long> memorySpace = new();

            MaskEnum[] mask = new MaskEnum[Size];

            foreach (var line in instructions)
            {
                if (line.StartsWith("mask"))
                {
                    mask = ParseMask(line);
                }
                else if (line.StartsWith("mem"))
                {
                    (var pos, var value) = ParseMemoryLine(line);

                    var valueBits = GetBitArray(value);

                    for (var p = 0; p < Size; p++)
                    {
                        valueBits[p] = mask[Size - p - 1] switch
                        {
                            MaskEnum.Zero => false,
                            MaskEnum.One => true,
                            MaskEnum.X => valueBits[p],
                            _ => throw new Exception()
                        };
                    }

                    var v = GetLongFromBitArray(valueBits);
                    memorySpace[pos] = v;
                }
                else
                {
                    throw new Exception($"Operation not supported: {line}");
                }
            }

            var sum = memorySpace.Sum(kv => kv.Value);

            Console.WriteLine($"Sum:{sum}");
        }