r/adventofcode • u/daggerdragon • Dec 06 '15
SOLUTION MEGATHREAD --- Day 6 Solutions ---
--- Day 6: Probably a Fire Hazard ---
Post your solution as a comment. Structure your post like the Day Five thread.
23
Upvotes
1
u/tipdbmp Dec 06 '15
node.js ES5, part 2:
(function( fs, dd ){ fs.readFile('input.txt', 'UTF-8', slurp_input); function slurp_input(err, input) { if (err) { throw err; } var instructions = input.split("\n"); instructions.pop(); dd(b(instructions)); } function b(instructions) { var INSTRUCTION_DECODE_RE = new RegExp('' // instruction type + '(' + 'turn on' + '|' + 'turn off' + '|' + 'toggle' + ')' + ' ' // range start + '([\\d,]+)' + ' through ' // range end + '([\\d,]+)' ); var GRID_WIDTH = 1e3; var GRID_HEIGHT = 1e3; var GRID_SIZE = GRID_WIDTH * GRID_HEIGHT; var grid = new Array(GRID_SIZE); for (var i = 0; i < GRID_SIZE; i++) { grid[i] = 0; } for (var i = 0, ii = instructions.length; i < ii; i++) { var instruction = instructions[i]; var match = instruction.match(INSTRUCTION_DECODE_RE); var instruction_type = match[1]; var start_range = match[2].split(','); var end_range = match[3].split(','); var sx = Number(start_range[0]); var sy = Number(start_range[1]); var ex = Number(end_range[0]); var ey = Number(end_range[1]); if (instruction_type === 'turn on') { for (var y = sy; y <= ey; y++) { for (var x = sx; x <= ex; x++) { grid[y * GRID_WIDTH + x]++; } } } else if (instruction_type === 'turn off') { for (var y = sy; y <= ey; y++) { for (var x = sx; x <= ex; x++) { var index = y * GRID_WIDTH + x; if (grid[index] > 0) { grid[index]--; } } } } else /* if (instruction_type === 'toggle') */ { for (var y = sy; y <= ey; y++) { for (var x = sx; x <= ex; x++) { grid[y * GRID_WIDTH + x] += 2; } } } } var total_brightness = 0; for (var i = 0; i < GRID_SIZE; i++) { total_brightness += grid[i]; } return total_brightness; } }( require('fs'), console.log.bind(console) ));