public void ProcessMemory()
        {
            while (InstructionPointer < Memory.Length)
            {
                var optCode = (OptCode)(Memory[InstructionPointer] % 100);

                switch (optCode)
                {
                case OptCode.Add:
                    Memory[Memory[InstructionPointer + 3]] = GetParameter(1) + GetParameter(2);
                    MoveToNextPointer();
                    break;

                case OptCode.Multiply:
                    Memory[Memory[InstructionPointer + 3]] = GetParameter(1) * GetParameter(2);
                    MoveToNextPointer();
                    break;

                case OptCode.Input:
                    Memory[Memory[InstructionPointer + 1]] = ProgramId;
                    MoveToNextPointer(2);
                    break;

                case OptCode.Output:
                    OutputResults.Add(GetParameter(1));
                    MoveToNextPointer(2);
                    break;

                case OptCode.JumpIfTrue:
                    if (GetParameter(1) != 0)
                    {
                        InstructionPointer = GetParameter(2);
                    }
                    else
                    {
                        MoveToNextPointer(3);
                    }
                    break;

                case OptCode.JumpIfFalse:
                    if (GetParameter(1) == 0)
                    {
                        InstructionPointer = GetParameter(2);
                    }
                    else
                    {
                        MoveToNextPointer(3);
                    }
                    break;

                case OptCode.LessThan:
                    Memory[Memory[InstructionPointer + 3]] = GetParameter(1) < GetParameter(2) ? 1 : 0;
                    MoveToNextPointer();
                    break;

                case OptCode.Equals:
                    Memory[Memory[InstructionPointer + 3]] = GetParameter(1) == GetParameter(2) ? 1 : 0;
                    MoveToNextPointer();
                    break;

                case OptCode.Halt:
                    Console.WriteLine($"OptCode 99 at position {InstructionPointer}. Halting...");
                    Processed = true;
                    return;

                default:
                    Console.WriteLine($"Invalid Opt Code at position {InstructionPointer} of {optCode}");
                    Processed = true;
                    return;
                }
            }
        }