private static RegisterSample ParseRegisterUpdateResult(string registerUpdateResultInput)
        {
            IEnumerable <int> ParseRegisterValues(string value, string prefix) => value
            .TrimStart(prefix)
            .Trim(' ', '[', ']')
            .Split(',')
            .Select(i => int.Parse(i.Trim()));

            var inputs = registerUpdateResultInput.Split(Environment.NewLine);

            var initialValues = new RegisterValues(ParseRegisterValues(inputs.First(), "Before:"));
            var updateCommand = ParseUpdateRegisterCommand(inputs[1]);
            var updatedValues = new RegisterValues(ParseRegisterValues(inputs.Last(), "After:"));

            return(new RegisterSample(initialValues, updateCommand, updatedValues));
        }
        public static void SolvePartTwo()
        {
            var registerResults = GetSamplesInput();
            var instructions    = GetTestInput();

            var opcodeNumbers = FindOpcodeNumbersMeaning(registerResults);

            var register = new RegisterValues(0, 0, 0, 0);

            foreach (var instruction in instructions)
            {
                opcodeNumbers[instruction.OpcodeNumber].UpdateRegisters(register, instruction.Instruction);
            }

            register[0].WriteLine("Day 16, Part 2: ");
        }
Exemplo n.º 3
0
 public bool AreValuesEqual(RegisterValues other) => Values.SequenceEqual(other.Values);
        public void UpdateRegisters(RegisterValues registerValues, RegisterInstruction updateCommand)
        {
            var newRegisterValue = calculateNewRegisterValue(registerValues.Values, updateCommand);

            registerValues.UpdateValue(updateCommand.OutputToRegister, newRegisterValue);
        }