private static void SolvePart1(string fileText) { var instructions = fileText.SplitIntoLines() .Select(Part1Instruction.Parse); var computer = new Part1ProgramState(); computer.LoadProgram(instructions); var answer = computer.ExecuteUntilRecover(); Output.Answer(answer); }
public void Execute(Part1ProgramState programState) { switch (_opCode) { case "snd": programState.PlaySound(GetOperandValue(_op1, programState)); break; case "set": programState.SetRegisterValue(_op1, GetOperandValue(_op2, programState)); break; case "add": var sum = GetOperandValue(_op1, programState) + GetOperandValue(_op2, programState); programState.SetRegisterValue(_op1, sum); break; case "mul": var prod = (long)GetOperandValue(_op1, programState) * GetOperandValue(_op2, programState); programState.SetRegisterValue(_op1, prod); break; case "mod": var mod = GetOperandValue(_op1, programState) % GetOperandValue(_op2, programState); programState.SetRegisterValue(_op1, mod); break; case "rcv": if (GetOperandValue(_op1, programState) != 0) { programState.RaiseValueRecovered(); } break; case "jgz": if (GetOperandValue(_op1, programState) > 0) { programState.RelativeJump(GetOperandValue(_op2, programState)); } break; } }
private long GetOperandValue(string operand, Part1ProgramState programState) { return(char.IsLetter(operand[0]) ? programState.GetRegisterValue(operand) : long.Parse(operand)); }