public override string Solve_1() { var reMask = new Regex(@"mask = (?<mask>\w+)"); var reMem = new Regex(@"mem\[(?<address>\d+)+\] = (?<value>\d+)"); BitMask mask = new BitMask("0"); var memory = new Dictionary <int, long>(); _input.ForEach(line => { var m = reMem.Match(line); if (m.Success) { var k = int.Parse(m.Groups["address"].Value); var v = int.Parse(m.Groups["value"].Value); memory[k] = mask.Apply(v); } else { m = reMask.Match(line); mask = new BitMask(m.Groups["mask"].Value); } }); return($"{memory.Values.ToList().Sum()}"); }
public void SetValue(MemoryPosition memPosition, MemoryValue value) { if (chipVersion == 1) { value = bitMask.Apply(value); } if (chipVersion == 2) { memPosition = bitMask.Apply(memPosition); } if (memRoot.ShouldSplit(memPosition, 0)) { memRoot = memRoot.Split(); } memRoot.SetValue(memPosition, 0, value); }