Skip to content

Instantly share code, notes, and snippets.

@amezick
Created December 5, 2019 19:42
Show Gist options
  • Save amezick/2053284cb326b59cea2cc2105d14e383 to your computer and use it in GitHub Desktop.
Save amezick/2053284cb326b59cea2cc2105d14e383 to your computer and use it in GitHub Desktop.
Advant Of code 2019 day 5
let result = 0;
//let input = '1,12,2,3,1,1,2,3,1,3,4,3,1,5,0,3,2,1,9,19,1,10,19,23,2,9,23,27,1,6,27,31,2,31,9,35,1,5,35,39,1,10,39,43,1,10,43,47,2,13,47,51,1,10,51,55,2,55,10,59,1,9,59,63,2,6,63,67,1,5,67,71,1,71,5,75,1,5,75,79,2,79,13,83,1,83,5,87,2,6,87,91,1,5,91,95,1,95,9,99,1,99,6,103,1,103,13,107,1,107,5,111,2,111,13,115,1,115,6,119,1,6,119,123,2,123,13,127,1,10,127,131,1,131,2,135,1,135,5,0,99,2,14,0,0'
let input = '3,225,1,225,6,6,1100,1,238,225,104,0,1101,40,27,224,101,-67,224,224,4,224,1002,223,8,223,1001,224,2,224,1,224,223,223,1101,33,38,225,1102,84,60,225,1101,65,62,225,1002,36,13,224,1001,224,-494,224,4,224,1002,223,8,223,1001,224,3,224,1,223,224,223,1102,86,5,224,101,-430,224,224,4,224,1002,223,8,223,101,6,224,224,1,223,224,223,1102,23,50,225,1001,44,10,224,101,-72,224,224,4,224,102,8,223,223,101,1,224,224,1,224,223,223,102,47,217,224,1001,224,-2303,224,4,224,102,8,223,223,101,2,224,224,1,223,224,223,1102,71,84,225,101,91,40,224,1001,224,-151,224,4,224,1002,223,8,223,1001,224,5,224,1,223,224,223,1101,87,91,225,1102,71,19,225,1,92,140,224,101,-134,224,224,4,224,1002,223,8,223,101,1,224,224,1,224,223,223,2,170,165,224,1001,224,-1653,224,4,224,1002,223,8,223,101,5,224,224,1,223,224,223,1101,49,32,225,4,223,99,0,0,0,677,0,0,0,0,0,0,0,0,0,0,0,1105,0,99999,1105,227,247,1105,1,99999,1005,227,99999,1005,0,256,1105,1,99999,1106,227,99999,1106,0,265,1105,1,99999,1006,0,99999,1006,227,274,1105,1,99999,1105,1,280,1105,1,99999,1,225,225,225,1101,294,0,0,105,1,0,1105,1,99999,1106,0,300,1105,1,99999,1,225,225,225,1101,314,0,0,106,0,0,1105,1,99999,1107,226,677,224,1002,223,2,223,1006,224,329,101,1,223,223,8,226,226,224,1002,223,2,223,1005,224,344,101,1,223,223,1007,677,226,224,102,2,223,223,1005,224,359,101,1,223,223,8,226,677,224,102,2,223,223,1005,224,374,101,1,223,223,1107,677,677,224,1002,223,2,223,1005,224,389,1001,223,1,223,108,226,677,224,102,2,223,223,1005,224,404,1001,223,1,223,108,677,677,224,1002,223,2,223,1006,224,419,101,1,223,223,107,677,677,224,102,2,223,223,1006,224,434,101,1,223,223,108,226,226,224,1002,223,2,223,1006,224,449,1001,223,1,223,8,677,226,224,1002,223,2,223,1005,224,464,101,1,223,223,1108,226,677,224,1002,223,2,223,1006,224,479,1001,223,1,223,1108,677,677,224,1002,223,2,223,1005,224,494,101,1,223,223,7,677,677,224,1002,223,2,223,1005,224,509,101,1,223,223,1007,677,677,224,1002,223,2,223,1005,224,524,101,1,223,223,7,677,226,224,1002,223,2,223,1005,224,539,101,1,223,223,1107,677,226,224,102,2,223,223,1006,224,554,101,1,223,223,107,226,677,224,1002,223,2,223,1005,224,569,101,1,223,223,107,226,226,224,1002,223,2,223,1005,224,584,101,1,223,223,1108,677,226,224,102,2,223,223,1006,224,599,1001,223,1,223,1008,677,677,224,102,2,223,223,1006,224,614,101,1,223,223,7,226,677,224,102,2,223,223,1005,224,629,101,1,223,223,1008,226,677,224,1002,223,2,223,1006,224,644,101,1,223,223,1007,226,226,224,1002,223,2,223,1005,224,659,1001,223,1,223,1008,226,226,224,102,2,223,223,1006,224,674,1001,223,1,223,4,223,99,226';
//let input = '01,2,3,9,04,9,99,7,8,9'
//let input = '101,2,3,9,04,9,99,7,8,9'
//let input = '1001,2,3,9,04,9,99,7,8,9'
//let input = '1101,2,3,9,04,9,99,7,8,9'
//let input = '1101,-2,3,9,04,9,99,7,8,9'
//let input = '1101,2,-3,9,04,9,99,7,8,9'
//let input = '2,2,3,9,04,9,99,7,8,9'
//let input = '102,2,3,9,04,9,99,7,8,9'
//let input = '1002,2,3,9,04,9,99,7,8,9'
//let input = '1102,2,3,9,04,9,99,7,8,9'
//let input = '1102,-2,3,9,04,9,99,7,8,9'
//let input = '1102,2,-3,9,04,9,99,7,8,9'
//let input = '1,0,0,0,99';
//let input = '2,3,0,3,99';
//let input = '2,4,4,5,99,0';
//let input = '1,1,1,4,99,5,6,0,99';
//console.log(mathReverse(1,1234));
let cmd = input.split(',');
cmd = cmd.map(num => parseInt(num, 10));
//console.table(cmd);
let cmdPtr = 0;
while (cmd[cmdPtr] !== 99 && cmdPtr <= cmd.length) {
let fullCommand = cmd[cmdPtr];
let command = fullCommand % 100;
console.log(cmdPtr + " : " + fullCommand + " " + cmd[cmdPtr + 1] + " " + cmd[cmdPtr + 2] + " " + cmd[cmdPtr + 3]);
//console.log(fullCommand + " " + cmd[cmd[cmdPtr + 1]] + " " + cmd[cmd[cmdPtr + 2]] + " " + cmd[cmdPtr + 3]);
//console.log(cmd[6]);
if (command === 1) {
//Add
let firstNum = cmd[cmd[cmdPtr + 1]];
let secondNum = cmd[cmd[cmdPtr + 2]];
let destination = cmd[cmdPtr + 3];
if (mathReverse(2, fullCommand) === 1) {
firstNum = cmd[cmdPtr + 1];
}
if (mathReverse(3, fullCommand) === 1) {
secondNum = cmd[cmdPtr + 2];
}
let addResult = add(firstNum, secondNum);
cmd[destination] = add(firstNum, secondNum);
console.log("Add: " + firstNum + " " + secondNum + "=" + addResult + " " + cmdPtr + " -> " + destination);
cmdPtr += 4;
} else if (command === 2) {
//Multiply
let firstNum = cmd[cmd[cmdPtr + 1]];
let secondNum = cmd[cmd[cmdPtr + 2]];
let destination = cmd[cmdPtr + 3];
if (mathReverse(2, fullCommand) === 1) {
firstNum = cmd[cmdPtr + 1];
}
if (mathReverse(3, fullCommand) === 1) {
secondNum = cmd[cmdPtr + 2];
}
let mulResult = multiply(firstNum, secondNum);
cmd[destination] = mulResult;
console.log("Mul: " + firstNum + " " + secondNum + "=" + mulResult + " " + cmdPtr + " -> " + destination);
cmdPtr += 4;
} else if (command === 3) {
//Input
//console.log("Found Input: 3," + cmd[cmdPtr + 1]);
cmd[cmd[cmdPtr + 1]] = 1;
cmdPtr += 2;
} else if (command === 4) {
//Output
console.log("Found Output: " + fullCommand + "," + cmd[cmdPtr + 1] + "-" + cmdPtr);
let firstNum = cmd[cmd[cmdPtr + 1]];
if (mathReverse(2, fullCommand) === 1) {
firstNum = cmd[cmdPtr + 1];
}
console.log("Output: " + firstNum);
//console.table(cmd);
if (firstNum !== 0) {
break;
}
cmdPtr += 2;
} else {
console.log("ERROR! COMMAND: " + fullCommand);
}
//console.log("--> " + cmd[0]);
}
//console.log(cmd[cmdPtr]);
// console.table(cmd);
function multiply(a, b) {
return a * b;
};
function add(a, b) {
return a + b;
};
function mathReverse(ntn, number) {
return Math.floor((number / Math.pow(10, ntn)) % 10);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment