|
@@ -1,3 +1,5 @@
|
|
|
|
+const ComputerParameterMode = require("./ComputerParameterMode");
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* The stack, or memory, for the Intcode Computer
|
|
* The stack, or memory, for the Intcode Computer
|
|
*
|
|
*
|
|
@@ -26,19 +28,39 @@ module.exports = class Stack {
|
|
this.pointer--;
|
|
this.pointer--;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Get the value from the stack by the pointer's current position
|
|
|
|
+ *
|
|
|
|
+ * @param {number} [parameterMode=0] The Parameter Mode to use to retrieve the value
|
|
|
|
+ * @returns {number} The value at the current pointer position on the stack
|
|
|
|
+ */
|
|
|
|
+ Get(parameterMode = ComputerParameterMode.POSITION_MODE) {
|
|
|
|
+ let value = this._stack[this.pointer];
|
|
|
|
+ if (parameterMode == ComputerParameterMode.POSITION_MODE) {
|
|
|
|
+ value = this._stack[value];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return value;
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Get a value at a given index on the stack
|
|
* Get a value at a given index on the stack
|
|
*
|
|
*
|
|
* @param {number} index The index of the value to retrieve
|
|
* @param {number} index The index of the value to retrieve
|
|
|
|
+ * @param {number} [parameterMode=0] The Parameter Mode to use to retrieve the value
|
|
* @returns {number} The value at the given index, or 0 if the index hasn't been defined yet
|
|
* @returns {number} The value at the given index, or 0 if the index hasn't been defined yet
|
|
*/
|
|
*/
|
|
- GetAtIndex(index) {
|
|
|
|
|
|
+ GetAtIndex(index, parameterMode = ComputerParameterMode.POSITION_MODE) {
|
|
if (index == null || Number.isNaN(index) || !Number.isInteger(index)) {
|
|
if (index == null || Number.isNaN(index) || !Number.isInteger(index)) {
|
|
throw new TypeError("index must be an integer");
|
|
throw new TypeError("index must be an integer");
|
|
}
|
|
}
|
|
|
|
|
|
try {
|
|
try {
|
|
- return index !== null ? this._stack[index] : this._stack[this.pointer];
|
|
|
|
|
|
+ let value = this._stack[index];
|
|
|
|
+ if (parameterMode == ComputerParameterMode.POSITION_MODE) {
|
|
|
|
+ value = this._stack[value];
|
|
|
|
+ }
|
|
|
|
+ return value;
|
|
}
|
|
}
|
|
catch (e) {
|
|
catch (e) {
|
|
return 0;
|
|
return 0;
|