Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const fs = require('fs');
  2. const chalk = require('chalk');
  3.  
  4. var args = process.argv.slice(2);
  5.  
  6. function reverseDigitsOf(n) {
  7.     if (n == 0) return [0];
  8.     var a = n;
  9.     digits = [];
  10.     while(a > 0) {
  11.         digits.push(a % 10);
  12.         a = Math.floor(a / 10);
  13.     }
  14.     return digits;
  15. }
  16.  
  17. function process(intcode,input) {
  18.     var ptr = 0;
  19.     var output = 0;
  20.     while (true) {
  21.         if (intcode[ptr] == 99) break;
  22.         var parts = reverseDigitsOf(intcode[ptr]);
  23.         var opcode = parts[0];
  24.         switch (opcode) {
  25.             // Add
  26.             case 1:
  27.                 var a = (parts[2] == 1) ? intcode[ptr+1] : intcode[intcode[ptr+1]];
  28.                 var b = (parts[3] == 1) ? intcode[ptr+2] : intcode[intcode[ptr+2]];
  29.                 var d = intcode[ptr+3];
  30.                 intcode[d] = a + b;
  31.                 ptr += 4;
  32.                 break;
  33.            
  34.             // Multiply
  35.             case 2:
  36.                 var a = (parts[2] == 1) ? intcode[ptr+1] : intcode[intcode[ptr+1]];
  37.                 var b = (parts[3] == 1) ? intcode[ptr+2] : intcode[intcode[ptr+2]];
  38.                 var d = intcode[ptr+3];
  39.                 intcode[d] = a * b;
  40.                 ptr += 4;
  41.                 break;
  42.            
  43.             // Input
  44.             case 3:
  45.                 console.log("Input: " + input)
  46.                 intcode[intcode[ptr+1]] = input;
  47.                 ptr += 2;
  48.                 break;
  49.            
  50.             // Output
  51.             case 4:
  52.                 console.log("Output: " + intcode[intcode[ptr+1]]);
  53.                 output = intcode[intcode[ptr+1]];
  54.                 ptr += 2;
  55.                 break;
  56.  
  57.             // Jump if True
  58.             case 5:
  59.                 var a = (parts[2] == 1) ? intcode[ptr+1] : intcode[intcode[ptr+1]];
  60.                 var b = (parts[3] == 1) ? intcode[ptr+2] : intcode[intcode[ptr+2]];
  61.                 if (a != 0) { ptr = b }
  62.                 else { ptr += 3; }
  63.                 break;
  64.            
  65.             // Jump if False
  66.             case 6:
  67.                 var a = (parts[2] == 1) ? intcode[ptr+1] : intcode[intcode[ptr+1]];
  68.                 var b = (parts[3] == 1) ? intcode[ptr+2] : intcode[intcode[ptr+2]];
  69.                 if (a == 0) { ptr = b; }
  70.                 else { ptr += 3; }
  71.                 break;
  72.            
  73.             // Less Than
  74.             case 7:
  75.                 var a = (parts[2] == 1) ? intcode[ptr+1] : intcode[intcode[ptr+1]];
  76.                 var b = (parts[3] == 1) ? intcode[ptr+2] : intcode[intcode[ptr+2]];
  77.                 var d = intcode[ptr+3];
  78.                 (a < b) ? intcode[d] = 1 : intcode[d] = 0;
  79.                 ptr += 4;
  80.                 break;
  81.            
  82.             // Equals
  83.             case 8:
  84.                 var a = (parts[2] == 1) ? intcode[ptr+1] : intcode[intcode[ptr+1]];
  85.                 var b = (parts[3] == 1) ? intcode[ptr+2] : intcode[intcode[ptr+2]];
  86.                 var d = intcode[ptr+3];
  87.                 (a == b) ? intcode[d] = 1 : intcode[d] = 0;
  88.                 ptr += 4;
  89.                 break;
  90.  
  91.             default:
  92.                 console.log("ERROR: Unknown instruction: "+opcode);
  93.                 loop = false;
  94.                 return;
  95.                 break;
  96.         }
  97.     }
  98.     return output;
  99. }
  100.  
  101. function day05(filename) {
  102.  
  103.     // Load input
  104.     const input = fs.readFileSync(filename)
  105.         .toString()
  106.         .split(",")
  107.         .map(n => Number(n));
  108.  
  109.     // Part 1
  110.     var intcode = [...input];
  111.     const part1 = process(intcode,1);
  112.  
  113.     // Part 2
  114.     intcode = [...input];
  115.     const part2 = process(intcode,5);
  116.  
  117.     return [part1,part2];
  118. }
  119.  
  120. const [part1,part2] = day05(args[0]);
  121. console.log(chalk.blue("Part 1: ") + chalk.yellow(part1)); // 7265618
  122. console.log(chalk.blue("Part 2: ") + chalk.yellow(part2)); // 7731427
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement