Функциональный JavaScriptГенераторы значений

Выбор случайного элемента с весом

Функция randomIndexGenerator принимает массив arr с весами. Вес — это неотрицательное число.

Ваша задача вернуть случайный индекс (целое число от 0 до arr.length - 1). При этом вероятность возвращения определенного индекса должна быть пропорциональна его весу.

Разберем несколько примеров.

Пример 1

const weights1 = [2, 5, 3]; const getIndex1 = randomIndexGenerator(weights1); console.log(getIndex1());

У индекса 0 — вес 2, у индекса 1 — вес 5, у индекса 2 — вес 3. Общий вес составляет 10. Таким образом в 2 случаях из 10 должно вернуться число 0, в 3 случаях из 10 — число 2 и в 5 случаях из 10 — число 1.

Пример 2

const weights2 = [7.5, 3.75]; const getIndex2 = randomIndexGenerator(weights2); console.log(getIndex2());

Веса не обязаны быть только целыми числами. В этом примере вес индекса 0 в два раза больше веса индекса 1. Соотвественно, в 1 случае из 3 будет возвращаться число 1 и в 2 случаях из 3 должно возвращаться число 0.

Эта задача встречается на собеседованиях