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: "); }
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); }