Skip to content

Instantly share code, notes, and snippets.

@DevinClark
Created December 3, 2019 18:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DevinClark/a89c39c1632c32ae06dfdaf6c6672860 to your computer and use it in GitHub Desktop.
Save DevinClark/a89c39c1632c32ae06dfdaf6c6672860 to your computer and use it in GitHub Desktop.
Advent of Code
const { deepStrictEqual } = require('assert');
const fs = require('fs');
const ADDITION = 1;
const MULTIPLCATION = 2;
const EOF = 99;
const DEBUG = false;
function executeProgram(input) {
const program = input.split(',').map((v) => parseInt(v));
var pointer = 0;
DEBUG && console.log('program', program);
while(pointer < program.length) {
const pointerValue = program[pointer];
let outputPointer = program[pointer + 3];
switch(pointerValue) {
case ADDITION:
program[outputPointer] = add(program, pointer);
pointer += 4;
break;
case MULTIPLCATION:
program[outputPointer] = multiply(program, pointer);
pointer += 4;
break;
case EOF:
return program.join(',');
default:
throw new Error('Unknown instruction. ' + pointerValue);
}
}
return input;
}
function add(program, pointer) {
DEBUG && console.log('add', program, pointer);
let aPointer = program[pointer + 1];
let bPointer = program[pointer + 2];
DEBUG && console.log(program[aPointer], ' + ', program[bPointer]);
return program[aPointer] + program[bPointer];
}
function multiply(program, pointer) {
DEBUG && console.log('multiply', program, pointer);
let aPointer = program[pointer + 1];
let bPointer = program[pointer + 2];
DEBUG && console.log(program[aPointer], ' * ', program[bPointer]);
return program[aPointer] * program[bPointer];
}
console.log('executeProgram Tests');
deepStrictEqual(executeProgram('1,0,0,0,99'), '2,0,0,0,99');
deepStrictEqual(executeProgram('2,3,0,3,99'), '2,3,0,6,99');
deepStrictEqual(executeProgram('2,4,4,5,99,0'), '2,4,4,5,99,9801');
deepStrictEqual(executeProgram('1,1,1,4,99,5,6,0,99'), '30,1,1,4,2,5,6,0,99');
deepStrictEqual(executeProgram('1,9,10,3,2,3,11,0,99,30,40,50'), '3500,9,10,70,2,3,11,0,99,30,40,50');
// Part 2
const input = fs.readFileSync('./input.txt', 'utf8');
function findCorrectProgram() {
for (var noun = 0; noun <= 99; noun++) {
for(var verb = 0; verb <= 99; verb++) {
var p = input.split(',');
p[1] = noun;
p[2] = verb;
var output = executeProgram(p.join(',')).split(',');
if (output[0] === '19690720') {
console.log(100 * noun + verb);
console.log('Matched Program', output.join(','));
}
}
}
}
findCorrectProgram();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment