Требуются вероятности получения рыб с 1 по 4 для заданного числа X
и ряда диапазонов. Общее количество рыб:
Fi sh 4) 51 или X (если X ниже)
Fi sh 3) 68-51 o X-51 (если X ниже 68)
et c.
Если какой-либо из этих XN отрицателен, это означает, что нет рыб этого типа.
Это может быть достигается с помощью любой из двух функций ниже:
function fishProb(x) {
let fish4 = Math.max(Math.min(x, 51),0)
let fish3 = Math.max(Math.min(x-51, 68-51),0)
let fish2 = Math.max(Math.min(x-68, 82-68),0)
let fish1 = Math.max(Math.min(x-82, 99-82),0)
return([fish1, fish2, fish3, fish4].map(f => f/x))
}
function fishProb2(x) {
var allFishes = x
var fishType = [51, 68-51, 82-68, 99-82]
var fishes = []
for (const currentFishes of fishType) {
fishes.push( Math.max(Math.min(allFishes, currentFishes), 0) )
allFishes -= currentFishes
}
return(fishes.map(f => f/x).reverse())
}
Обе функции возвращают одно и то же. Второй, я думаю, выражает проблему более простым способом.
Если у вас X = 70, то у вас есть 51 Fish4, из оставшихся 70-51 у вас есть (68-51) из Fish3, а остальные 3 - это Fish2. В лоте нет Fish1.
//X = 70
[0, 0.02857142857142857, 0.24285714285714285, 0.7285714285714285]
//X = 85
[0.03529411764705882, 0.16470588235294117, 0.2, 0.6]
//X = 20. In this case you only have 20 Fish4 and none of the others.
[0, 0, 0, 1]