public IntcodeVirtualMachine(List <int> program, IInputProvider inputProvider = null, IOutputProvider outputProvider = null)
        {
            this._program = program.Select(x => (long)x).ToList();
            _vmstate      = new VirtualMachineState();

            this._inputProvider  = inputProvider ?? new ConsoleInputProvider();
            this._outputProvider = outputProvider ?? new ConsoleOutputProvider();
        }
        public IntcodeVirtualMachine(List <long> program, IInputProvider inputProvider = null, IOutputProvider outputProvider = null)
        {
            this._program = program;

            _vmstate = new VirtualMachineState();

            this._inputProvider  = inputProvider ?? new ConsoleInputProvider();
            this._outputProvider = outputProvider ?? new ConsoleOutputProvider();
        }