34 lines
860 B
JavaScript
34 lines
860 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 + 1n])
|
|
.toMap(),
|
|
),
|
|
),
|
|
)
|
|
.glibEntries.map(([point, distance]) => distance)
|
|
.min(),
|
|
};
|