function complexity(codes, numDirRobots = 25) {
const seqCounts = (seq) =>
sequences(seq, dirPad).reduce(
(fTable, s) => AOC.addToFreqTable(fTable, s),
new Map()
);
let fTables = codes.map(
(code) => new Map([[sequences(code, numericPad).join(""), 1]])
);
for (let i = 0; i < numDirRobots; i++) {
fTables = fTables.map((fTable) => {
const subFTable = new Map();
fTable.forEach((freq, seq) =>
seqCounts(seq).forEach((subFreq, subSeq) =>
subFTable.set(subSeq, (subFTable.get(subSeq) || 0) + subFreq * freq)
)
);
return subFTable;
});
}
const cmplx = (seq) =>
d3.sum([...seq.entries()], ([key, freq]) => key.length * freq);
return d3.sum(
fTables,
(seq, i) => cmplx(seq) * Number(codes[i].slice(0, -1))
);
}