jsadvent/solutions/2016/3.js

47 lines
1,000 B
JavaScript
Raw Normal View History

2020-12-10 08:33:00 +00:00
const { Glib, BNMath: Math } = require('../../lib');
function* chunk(input, size) {
let cc = [];
for (const row of input) {
cc.push(row);
if (cc.length === 3) {
yield cc;
cc = [];
}
}
if (cc.length !== 0) {
throw new Error('leftovers!');
}
}
const validTriangle = (sides) => {
const hypotenuse = Math.max(...sides);
const others = sides.slice();
others.splice(sides.indexOf(hypotenuse), 1);
return others[0] + others[1] > hypotenuse;
};
const parse = (input) =>
Glib.fromLines(input).map(
(triangle) =>
triangle
.trim()
.split(/\s+/)
.glib.toInts().array,
);
module.exports = {
'1': (input) => parse(input).filter(validTriangle).length,
'2': (input) =>
parse(input)
.chunk(3)
.flatMap(([a, b, c]) => {
const output = [];
for (let i = 0; i < 3; i++) {
output.push([a[i], b[i], c[i]]);
}
return output;
})
.filter(validTriangle).length,
};