Почему в данном коде необходимо нижнее подчёркивание?
в задании на входе вы получаете подобные массивы: ["3:5", "4:2", "8:7"]
функция, передаваемая в .reduce(), имеет 2 обязательных параметра (accumulator, currentValue) и 2 необязательных (index, array).

здесь .reduce((a, [x, _, y]) в качестве второго параметра (currentValue) выступает [x, _, y].

если мы применим .reduce() к массиву, который я представил в самом начале ответа, в качестве currentValueбудут выступать следующие значения:

"3:5"
"4:2"
"8:7"

далее, в действие вступает деструктурирующее присваивание, которое будет применено к каждому из элементов массива (по некоторым причинам оно работает и со строками).
это можно интерпретировать как:
// используется 1 элемент массива //
let x, _, y;

[x, _, y] = "3:5"
/* x === "3", _ === ":", y === "5"  */

// используется 2 элемент массива //
let x, _, y;

[x, _, y] = "4:2"
/* x === "4", _ === ":", y === "2"  */

// используется 3 элемент массива //
let x, _, y;

[x, _, y] = "8:7"
/* x === "8", _ === ":", y === "7"  */
отвечая на ваш вопрос, "почему необходимо нижнее подчёркивание" - автор решения использует его для того, чтобы пропустить неиспользуемый элемент - двоеточие, которое остаётся неизменным на протяжении всего выполнения кода и в решении не фигурирует.

вы можете заменить _ на любое другое валидное название переменной, чтобы убедиться, что оно не используется.
или же, как в следующем примере, добавить запятую, чтобы проигнорировать это значение:
let x, y;

[x, ,y] = "5:3";
/* x === "5", y === "3" */
Подчёркивание в JS - допустимое имя переменной. Вы можете заменить его на любое другое неиспользуемое имя.
Автор кода, скорее всего, хотел показать, что деструктурируемое значение в дальнейшем не используется.