Calculate scores

Calculate exam score total based on some rules.

by Renoir Boulanger

JavaScript

"use strict";

/**
 * Calculate exam score total based on some rules.
 *
 * Sample Input
 *
 *   5 6 7
 *   3 6 10
 *
 * Sample Output
 *
 *   1 1 
 *
 * Explanation
 *
 * In this example:
 *
 *   A = (a0, a1, a2) = (5, 6, 7)
 *   B = (b0, b1, b2) = (3, 6, 10)
 *
 * Now, let's compare each individual score:
 *
 * a0 > b0 , so Alice receives point.
 * a1 = b1 , so nobody receives a point.
 * a2 < b2 , so Bob receives point.
 *
 * Alice's comparison score is 1, and Bob's comparison score is 1.
 *
 * Thus, we return 1 1 
 *
 * (Alice's comparison score followed by Bob's comparison score)
 **/
function main(input_data) {
    let scores = []
      , out = [];
    input_data.forEach(entry => {
        entry.split(' ').map(n => Number(n)).forEach((result, result_index) => {
            if (!Array.isArray(scores[result_index])) {
                scores[result_index] = [];    
            }
            scores[result_index].push(result);
        })
    });
    scores.forEach((test_entry, test_index) => {
        let largest = Math.max.apply(0, test_entry)
          , largestIndex = test_entry.findIndex(e => { return e === largest})
          , outcome = Array(test_entry.length).fill(0)
          , isSameScore = test_entry.every(e => { return e === largest });
        if (!isSameScore) {
            outcome[largestIndex] = 1;
        }
        out[test_index] = outcome;
    })
    var results = Array(out[0].length).fill(0);
    out.forEach(test_points => {
        test_points.forEach((out_point, out_point_idx) => {
            results[out_point_idx] += out_point;
        })
    })
    
    return results.join(' ');
}


/** Running some test samples **/

var contestants = [],
    output = [];

contestants.push('5 6 7');  // 1
contestants.push('3 6 10'); // 1

output.push([contestants, main(contestants)]);


var contestants = [];
contestants.push('5 6 7 9 5 6');  // 3
contestants.push('3 6 10 3 3 6'); // 1
output.push([contestants, main(contestants)]);

var contestants =...