decodeSignals = (signals) => {
const one = signals.find((s) => s.length === 2);
const seven = signals.find((s) => s.length === 3);
const four = signals.find((s) => s.length === 4);
const eight = signals.find((s) => s.length === 7);
const top = signalDiff(seven, one);
const nine = findSignalWithExtraSegment(four + top, signals);
const bottom = signalDiff(nine, four + top);
const three = findSignalWithExtraSegment(one + top + bottom, signals);
const middle = signalDiff(three, one + top + bottom);
const zero = signals.find((s) => s.length === 6 && !s.includes(middle));
const six = signals.find((s) => s.length === 6 && s !== zero && s !== nine);
const twoOrFive = signals.filter(
(s) => ![zero, one, three, four, six, seven, eight, nine].includes(s)
);
const five = findSignalWithExtraSegment(twoOrFive[0], [six])
? twoOrFive[0]
: twoOrFive[1];
const two = findSignalWithExtraSegment(twoOrFive[0], [six])
? twoOrFive[1]
: twoOrFive[0];
return [zero, one, two, three, four, five, six, seven, eight, nine];
}