aoc-copilot
Version:
Advent of Code automatic runner for examples and inputs
45 lines • 1.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.interpolate = interpolate;
function interpolate(data, fxs) {
for (let fx of fxs) {
const [[id, [...args]]] = Object.entries(fx);
if (['map', 'reduce'].includes(id) && Array.isArray(data)) {
if (id === 'map') {
data = data.map(rowData => interpolate(rowData, args[0]));
}
else {
const [[aggId, aggArgs]] = Object.entries(args[0][0]);
data = data.reduce((p, c) => {
return ops[aggId].apply(undefined, [p, c]);
});
}
}
else {
for (let [i, arg] of args.entries()) {
if (Array.isArray(arg)) {
args[i] = interpolate(data, arg);
}
}
data = ops[id].apply(data, args);
}
}
return data;
}
const ops = {
add(lhs, rhs) { return lhs + rhs; },
at(index) { return this.at(index); },
concat([...str]) { return this.concat(...str); },
join(separator) { return this.join(separator); },
length() { return this.length; },
match(pattern, flags) { return this.match(new RegExp(pattern, flags)); },
multiply(multiplicand, multiplier) { return multiplicand * multiplier; },
parseInt() { return parseInt(this); },
replaceAll(oldValue, newValue) { return this.replaceAll(oldValue, newValue); },
slice(start, end) { return this.slice(start, end); },
split(separator) { return this.split(separator); },
substring(start, end) { return this.substring(start, end); },
toString() { return this.toString(); },
toUpperCase() { return this.toUpperCase(); },
};
//# sourceMappingURL=fx.js.map