58 lines
1.0 KiB
JavaScript
58 lines
1.0 KiB
JavaScript
|
const fs = require('fs')
|
||
|
const readline = require('readline');
|
||
|
|
||
|
const readInterface = readline.createInterface({
|
||
|
input: fs.createReadStream('input'),
|
||
|
console: false
|
||
|
});
|
||
|
|
||
|
|
||
|
// array of arrays of bool. Coordinates are [y][x]. True = tree.
|
||
|
let map = [];
|
||
|
|
||
|
readInterface.on('line', function(line) {
|
||
|
let row = [];
|
||
|
|
||
|
line.split('').forEach(function(char) {
|
||
|
if (char == '.') {
|
||
|
row.push(false);
|
||
|
} else if (char == '#') {
|
||
|
row.push(true);
|
||
|
}; // ignore any other character
|
||
|
});
|
||
|
|
||
|
map.push(row);
|
||
|
});
|
||
|
|
||
|
|
||
|
readInterface.on('close', function(line) {
|
||
|
let totals = [];
|
||
|
|
||
|
[[1,1], [3,1], [5,1], [7,1], [1,2]].forEach(function(step) {
|
||
|
|
||
|
let treesHit = 0;
|
||
|
let x = 0;
|
||
|
let y = 0;
|
||
|
|
||
|
while (y + 1 < map.length) {
|
||
|
x += step[0];
|
||
|
y += step[1];
|
||
|
|
||
|
if (x + 1 > map[y].length) {
|
||
|
x -= map[y].length;
|
||
|
}
|
||
|
|
||
|
if (map[y][x]) {
|
||
|
treesHit++;
|
||
|
}
|
||
|
|
||
|
// console.log(x, y, map[y][x]);
|
||
|
}
|
||
|
|
||
|
totals.push(treesHit);
|
||
|
});
|
||
|
|
||
|
console.log(totals.reduce((a,b) => a * b));
|
||
|
});
|
||
|
|