コード例 #1
0
        private static void HandleJumpCommands(IIntCodeMemory workingMemory, ref int sizeOfInstruction, long relativeBase, ref long programPosition, IntInstruction instruction, InstructionMode modeParam1, InstructionMode modeParam2)
        {
            long input1 = workingMemory[programPosition + 1];
            long param1 = GetValueForInput(workingMemory, relativeBase, modeParam1, input1);

            long input2 = workingMemory[programPosition + 2];
            long param2 = GetValueForInput(workingMemory, relativeBase, modeParam2, input2);

            if ((instruction == IntInstruction.JumpIfTrue && (param1 != 0)) ||
                (instruction == IntInstruction.JumpIfFalse && (param1 == 0)))
            {
                programPosition   = param2;
                sizeOfInstruction = 0;
            }
        }
コード例 #2
0
        private static void HandleAdditionOrMultiplicationCommands(IIntCodeMemory workingMemory, long programPosition, long relativeBase, IntInstruction instruction, InstructionMode modeParam1, InstructionMode modeParam2, InstructionMode modeParam3)
        {
            long input1 = workingMemory[programPosition + 1];
            long value1 = GetValueForInput(workingMemory, relativeBase, modeParam1, input1);

            long input2 = workingMemory[programPosition + 2];
            long value2 = GetValueForInput(workingMemory, relativeBase, modeParam2, input2);

            long input3 = workingMemory[programPosition + 3];

            long result = instruction switch
            {
                IntInstruction.Add => value1 + value2,
                IntInstruction.Multiply => value1 * value2,
                _ => throw new Exception("Unrecognized IntInstruction"),
            };

            WriteResultToWorkingMemory(result, workingMemory, relativeBase, modeParam3, input3);
        }
コード例 #3
0
        private static void HandleComparisonCommands(IIntCodeMemory workingMemory, long relativeBase, long programPosition, IntInstruction instruction, InstructionMode modeParam1, InstructionMode modeParam2, InstructionMode modeParam3)
        {
            long input1 = workingMemory[programPosition + 1];
            long value1 = GetValueForInput(workingMemory, relativeBase, modeParam1, input1);

            long input2 = workingMemory[programPosition + 2];
            long value2 = GetValueForInput(workingMemory, relativeBase, modeParam2, input2);

            long input3 = workingMemory[programPosition + 3];

            var result = instruction switch
            {
                IntInstruction.LessThan => value1 < value2 ? 1 : 0,
                IntInstruction.Equals => value1 == value2 ? 1 : 0,
                _ => throw new Exception("Unexpected instruction")
            };

            WriteResultToWorkingMemory(result, workingMemory, relativeBase, modeParam3, input3);
        }