Beispiel #1
0
        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));
 }