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