public object Part1() { 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 newValue = mask.Mask(a.value); if (mem.ContainsKey(a.index)) { mem[a.index] = newValue; } else { mem.Add(a.index, newValue); } } } var sum = (ulong)0; foreach (var m in mem.Values) { sum += m; } return(sum); }