Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const fs = require('fs');
- const chalk = require('chalk');
- var args = process.argv.slice(2);
- function reverseDigitsOf(n) {
- if (n == 0) return [0];
- var a = n;
- digits = [];
- while(a > 0) {
- digits.push(a % 10);
- a = Math.floor(a / 10);
- }
- return digits;
- }
- function process(intcode,input) {
- var ptr = 0;
- var output = 0;
- while (true) {
- if (intcode[ptr] == 99) break;
- var parts = reverseDigitsOf(intcode[ptr]);
- var opcode = parts[0];
- switch (opcode) {
- // Add
- case 1:
- var a = (parts[2] == 1) ? intcode[ptr+1] : intcode[intcode[ptr+1]];
- var b = (parts[3] == 1) ? intcode[ptr+2] : intcode[intcode[ptr+2]];
- var d = intcode[ptr+3];
- intcode[d] = a + b;
- ptr += 4;
- break;
- // Multiply
- case 2:
- var a = (parts[2] == 1) ? intcode[ptr+1] : intcode[intcode[ptr+1]];
- var b = (parts[3] == 1) ? intcode[ptr+2] : intcode[intcode[ptr+2]];
- var d = intcode[ptr+3];
- intcode[d] = a * b;
- ptr += 4;
- break;
- // Input
- case 3:
- console.log("Input: " + input)
- intcode[intcode[ptr+1]] = input;
- ptr += 2;
- break;
- // Output
- case 4:
- console.log("Output: " + intcode[intcode[ptr+1]]);
- output = intcode[intcode[ptr+1]];
- ptr += 2;
- break;
- // Jump if True
- case 5:
- var a = (parts[2] == 1) ? intcode[ptr+1] : intcode[intcode[ptr+1]];
- var b = (parts[3] == 1) ? intcode[ptr+2] : intcode[intcode[ptr+2]];
- if (a != 0) { ptr = b }
- else { ptr += 3; }
- break;
- // Jump if False
- case 6:
- var a = (parts[2] == 1) ? intcode[ptr+1] : intcode[intcode[ptr+1]];
- var b = (parts[3] == 1) ? intcode[ptr+2] : intcode[intcode[ptr+2]];
- if (a == 0) { ptr = b; }
- else { ptr += 3; }
- break;
- // Less Than
- case 7:
- var a = (parts[2] == 1) ? intcode[ptr+1] : intcode[intcode[ptr+1]];
- var b = (parts[3] == 1) ? intcode[ptr+2] : intcode[intcode[ptr+2]];
- var d = intcode[ptr+3];
- (a < b) ? intcode[d] = 1 : intcode[d] = 0;
- ptr += 4;
- break;
- // Equals
- case 8:
- var a = (parts[2] == 1) ? intcode[ptr+1] : intcode[intcode[ptr+1]];
- var b = (parts[3] == 1) ? intcode[ptr+2] : intcode[intcode[ptr+2]];
- var d = intcode[ptr+3];
- (a == b) ? intcode[d] = 1 : intcode[d] = 0;
- ptr += 4;
- break;
- default:
- console.log("ERROR: Unknown instruction: "+opcode);
- loop = false;
- return;
- break;
- }
- }
- return output;
- }
- function day05(filename) {
- // Load input
- const input = fs.readFileSync(filename)
- .toString()
- .split(",")
- .map(n => Number(n));
- // Part 1
- var intcode = [...input];
- const part1 = process(intcode,1);
- // Part 2
- intcode = [...input];
- const part2 = process(intcode,5);
- return [part1,part2];
- }
- const [part1,part2] = day05(args[0]);
- console.log(chalk.blue("Part 1: ") + chalk.yellow(part1)); // 7265618
- console.log(chalk.blue("Part 2: ") + chalk.yellow(part2)); // 7731427
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement