let factor = (x) => {
if (x < 0) throw new Error("Пошел нахуй")
let result = 1
for (let i = x; i > 0; i -= 1)
result *= i
return result
}
// Количество перестановок размера n, в которых один элемент i повторяется ровно k[i] раз
let p = (n, k) => k.reduce(
(result, e) => result / factor(e),
factor(n)
)
// Количество сочетаний из n по k
let c = (n, k) => factor(n) / (factor(k) * factor(n - k))
// Размещение
let a = (n, k) => factor(n) / factor(n - k)
// Размещение с повторениями
let ar = (n, k) => Math.pow(n, k)
// Вероятность выпадения k[i] одинаковых символов i (остальные уникальные)
let PXX = (k, reels, symbols) => p(reels, k)
* c(symbols - k.length, reels - k.reduce((a, b) => a + b, 0)) // количество возможных способов выбрать оставшиеся уникальные символы
* a(symbols, k.length) // количество возможных способов выбрать символы, которые будут повторяться
/ ar(symbols, reels) // количество возможных комбинаций
let symbols = 11
let reels = 5 // Количество барабанов. На каждом symbols уникальных картинок
// Таблица выплат
// 3 одинаковых картинки - x5
// 4 одинаковых картинки - x40
// 5 одинаковых картинок - x100
// Одна строка
// С каждого проигрыша 80% уходит в джекпот. 20% в казино