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, };