Exemplo n.º 1
0
        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()}");
        }
Exemplo n.º 2
0
        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);
        }