jsadvent/solutions/2019/3.js
2020-12-10 02:33:00 -06:00

34 lines
859 B
JavaScript

const { Glib, Maps, Sets, Vector, twodee } = require('../../lib');
const parseLine = (input) =>
Glib.fromSplit(input, ',').map(([direction, ...numchars]) => {
return new twodee.Instruction(
twodee.UDLR[direction],
BigInt(numchars.join('')),
);
});
module.exports = {
'1': (input) =>
Sets.and(
...Glib.fromLines(input).map(
(line) => twodee.everyStep(parseLine(line)).map((i) => i.string).set,
),
)
.glib.map((i) => Vector.fromString(i).distance(twodee.ORIGIN))
.min(),
2: (input) =>
Maps.add(
...Maps.and(
...Glib.fromLines(input).map((line) =>
twodee
.everyStep(parseLine(line))
.map((pt, i) => [pt.string, i + 1])
.toMap(),
),
),
)
.glibEntries.map(([point, distance]) => distance)
.min(),
};