const compose = (...fns) => (arg) => fns.reduceRight((composed, fn) => fn(composed), arg);
const getData = (answers) => ({
points: [0, 0, 0],
result: [],
answers,
students: [
[1, 2, 3, 4, 5],
[2, 1, 2, 3, 2, 4, 2, 5],
[3, 3, 1, 1, 2, 2, 4, 4, 5, 5],
],
});
const compareAnswer = (data) => {
data.answers.forEach((answer, i) => {
if (data.students[0][i % 5] === answer) {
data.points[0]++;
}
if (data.students[1][i % 8] === answer) {
data.points[1]++;
}
if (data.students[2][i % 10] === answer) {
data.points[2]++;
}
});
return data;
};
const getMaxValue = (data) => ({
...data,
maxValue: Math.max(...data.points),
});
const compareStudent = ({ result, points, maxValue }) => {
points.forEach((point, idx) => {
if (point === maxValue) {
result.push(idx + 1);
}
});
return result;
};
const solution = (answers) => compose(compareStudent, getMaxValue, compareAnswer, getData)(answers);