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}"); }
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}"); }