public object Part2() { var mem = new Dictionary <ulong, ulong>(); Bitmask mask = null; foreach (var i in Instructions) { if (i.Type == InstructionType.SetMask) { mask = (Bitmask)i.Value; } else if (i.Type == InstructionType.SetMemory) { var a = ((ulong index, ulong value))i.Value; var indices = mask.MaskV2(a.index); foreach (var i2 in indices) { if (mem.ContainsKey(i2)) { mem[i2] = a.value; } else { mem.Add(i2, a.value); } } } } var sum = (ulong)0; foreach (var m in mem.Values) { sum += m; } return(sum); }