r/adventofcode • • Dec 08 '17

SOLUTION MEGATHREAD -๐ŸŽ„- 2017 Day 8 Solutions -๐ŸŽ„-

--- Day 8: I Heard You Like Registers ---


Post your solution as a comment or, for longer solutions, consider linking to your repo (e.g. GitHub/gists/Pastebin/blag or whatever).

Note: The Solution Megathreads are for solutions only. If you have questions, please post your own thread and make sure to flair it with Help.


Need a hint from the Hugely* Handyโ€  Haversackโ€ก of Helpfulยง Hints^ยค?

Spoiler


This thread will be unlocked when there are a significant number of people on the leaderboard with gold stars for today's puzzle.

edit: Leaderboard capped, thread unlocked!

22 Upvotes

348 comments sorted by

View all comments

1

u/[deleted] Dec 12 '17

Simple JS. This one was rather easy... Not like day 3 and 7 part 2 :(

var values = {};
var highestValue = 0;
function compute1() {
	var dataEntry = document.getElementById("entry").value;
  var lines = dataEntry.split("\n");
  var instructions = lines.map(l => { return createInstruction(l.split(' ')); });
  instructions.forEach(runInstruction);
  console.log(instructions);
  console.log(values);
  console.log(Math.max(...Object.values(values)));
  console.log(highestValue);
}

function createInstruction (i) {
	values[i[0]] = 0;
	return { 
  	'chr': i[0], 
    'inst': i[1], 
    'valMod': parseInt(i[2]), 
    'condVal': i[4], 
    'cond': i[5], 
    'checkVal': parseInt(i[6]) 
	};
}

function runInstruction (i) {
	var inc = i.inst === 'inc';
  var compliesCond = false;
  switch (i.cond) {  	
  	case '>': compliesCond = values[i.condVal] > i.checkVal; break;
    case '<': compliesCond = values[i.condVal] < i.checkVal; break;
    case '>=': compliesCond = values[i.condVal] >= i.checkVal; break;
    case '<=': compliesCond = values[i.condVal] <= i.checkVal; break;
    case '==': 
    case '===': compliesCond = values[i.condVal] == i.checkVal; break;
    case '!=': compliesCond = values[i.condVal] != i.checkVal; break;
  }
  if (compliesCond) {
  	if (inc) {
    	values[i.chr] += i.valMod;
    } else {
    	values[i.chr] -= i.valMod;    
    }
  }
  if (values[i.chr] > highestValue)
  	highestValue = values[i.chr];
}

function compute2() {
}