-
Notifications
You must be signed in to change notification settings - Fork 0
/
draw.scala
29 lines (23 loc) · 7.36 KB
/
draw.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
case class RarityWeight(award: String, weight: Int)
val rarities = Seq(RarityWeight("GOLD", 10), RarityWeight("SILVER", 60), RarityWeight("BRONZE", 100))
def draw(rarities: Seq[RarityWeight]): String = {
val distribution = rarities.foldLeft((0, Seq.empty[(RarityWeight,Int)])) { (res,item) =>
val sum = res._1 + item.weight
(sum, res._2 :+ (item, sum))
}
val s = distribution._2.find(_._2 > {
val r = math.random
(r * distribution._1).toInt
}).get
s._1.award
}
// draw!!
def test = {
var i = 0
do {
println(draw(rarities))
i = i + 1
} while (i < 1000)
}
// 1000回試行した結果
// BRONZE,BRONZE,SILVER,SILVER,BRONZE,BRONZE,SILVER,SILVER,SILVER,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,GOLD,SILVER,BRONZE,SILVER,BRONZE,BRONZE,SILVER,SILVER,BRONZE,SILVER,SILVER,GOLD,GOLD,SILVER,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,SILVER,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,GOLD,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,GOLD,SILVER,BRONZE,BRONZE,SILVER,GOLD,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,SILVER,SILVER,SILVER,SILVER,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,GOLD,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,SILVER,BRONZE,SILVER,SILVER,SILVER,GOLD,BRONZE,SILVER,BRONZE,BRONZE,SILVER,SILVER,SILVER,SILVER,GOLD,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,GOLD,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,GOLD,BRONZE,BRONZE,BRONZE,SILVER,GOLD,BRONZE,BRONZE,BRONZE,GOLD,SILVER,BRONZE,SILVER,SILVER,BRONZE,BRONZE,GOLD,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,SILVER,BRONZE,SILVER,SILVER,BRONZE,BRONZE,BRONZE,SILVER,SILVER,BRONZE,SILVER,BRONZE,SILVER,SILVER,BRONZE,BRONZE,SILVER,SILVER,SILVER,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,SILVER,BRONZE,SILVER,BRONZE,SILVER,SILVER,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,GOLD,BRONZE,BRONZE,SILVER,BRONZE,SILVER,SILVER,SILVER,BRONZE,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,SILVER,SILVER,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,SILVER,SILVER,BRONZE,BRONZE,SILVER,SILVER,SILVER,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,GOLD,BRONZE,SILVER,SILVER,BRONZE,BRONZE,SILVER,SILVER,BRONZE,BRONZE,BRONZE,SILVER,GOLD,BRONZE,BRONZE,SILVER,GOLD,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,SILVER,SILVER,SILVER,SILVER,SILVER,SILVER,SILVER,SILVER,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,SILVER,SILVER,SILVER,BRONZE,BRONZE,SILVER,BRONZE,SILVER,SILVER,GOLD,SILVER,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,SILVER,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,SILVER,SILVER,SILVER,SILVER,BRONZE,SILVER,SILVER,BRONZE,BRONZE,SILVER,BRONZE,SILVER,SILVER,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,SILVER,SILVER,SILVER,BRONZE,SILVER,BRONZE,SILVER,SILVER,SILVER,SILVER,SILVER,SILVER,SILVER,BRONZE,BRONZE,SILVER,SILVER,BRONZE,BRONZE,SILVER,SILVER,BRONZE,BRONZE,GOLD,SILVER,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,SILVER,SILVER,BRONZE,SILVER,SILVER,SILVER,GOLD,SILVER,BRONZE,SILVER,BRONZE,GOLD,SILVER,SILVER,BRONZE,BRONZE,SILVER,BRONZE,SILVER,SILVER,SILVER,SILVER,BRONZE,SILVER,SILVER,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,SILVER,SILVER,SILVER,GOLD,SILVER,BRONZE,SILVER,SILVER,BRONZE,SILVER,SILVER,BRONZE,SILVER,SILVER,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,SILVER,SILVER,BRONZE,BRONZE,BRONZE,GOLD,BRONZE,BRONZE,BRONZE,SILVER,GOLD,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,SILVER,GOLD,BRONZE,BRONZE,SILVER,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,SILVER,SILVER,SILVER,BRONZE,BRONZE,SILVER,SILVER,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,GOLD,GOLD,BRONZE,BRONZE,BRONZE,SILVER,SILVER,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,SILVER,SILVER,BRONZE,SILVER,SILVER,BRONZE,SILVER,SILVER,BRONZE,SILVER,BRONZE,SILVER,SILVER,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,SILVER,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,GOLD,SILVER,SILVER,SILVER,SILVER,SILVER,BRONZE,SILVER,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,GOLD,SILVER,SILVER,SILVER,BRONZE,SILVER,BRONZE,SILVER,SILVER,SILVER,BRONZE,BRONZE,SILVER,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,SILVER,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,SILVER,BRONZE,SILVER,BRONZE,BRONZE,SILVER,SILVER,BRONZE,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,SILVER,GOLD,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,GOLD,BRONZE,GOLD,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,SILVER,SILVER,SILVER,BRONZE,GOLD,BRONZE,SILVER,SILVER,BRONZE,SILVER,SILVER,GOLD,BRONZE,SILVER,BRONZE,SILVER,SILVER,SILVER,BRONZE,SILVER,SILVER,SILVER,GOLD,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,SILVER,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,SILVER,SILVER,BRONZE,SILVER,SILVER,SILVER,SILVER,BRONZE,GOLD,BRONZE,BRONZE,SILVER,SILVER,BRONZE,SILVER,SILVER,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,GOLD,BRONZE,BRONZE,GOLD,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,GOLD,BRONZE,SILVER,SILVER,BRONZE,SILVER,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,SILVER,SILVER,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,SILVER,SILVER,SILVER,BRONZE,SILVER,GOLD,SILVER,BRONZE,BRONZE,SILVER,SILVER,BRONZE,BRONZE,SILVER,SILVER,SILVER,SILVER,SILVER,GOLD,BRONZE,SILVER,SILVER,SILVER,GOLD,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,SILVER,GOLD,SILVER,BRONZE,SILVER,SILVER,SILVER,SILVER,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,SILVER,SILVER,SILVER,BRONZE,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,SILVER,SILVER,SILVER,SILVER,BRONZE,BRONZE,GOLD,SILVER,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,BRONZE,SILVER,SILVER,BRONZE,SILVER,GOLD,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,SILVER,GOLD,SILVER,SILVER,BRONZE,BRONZE,BRONZE,SILVER,GOLD,BRONZE,BRONZE,SILVER,BRONZE,BRONZE,SILVER,SILVER,BRONZE,SILVER,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,SILVER,BRONZE,SILVER,SILVER,SILVER,SILVER,SILVER,SILVER,BRONZE,SILVER,SILVER,BRONZE,BRONZE,SILVER,SILVER,BRONZE,BRONZE,GOLD,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,SILVER,SILVER,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,BRONZE,SILVER,SILVER,BRONZE,SILVER,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,SILVER,SILVER,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,SILVER,SILVER,BRONZE,SILVER,BRONZE,SILVER,BRONZE,SILVER,BRONZE,SILVER,BRONZE,SILVER,BRONZE,BRONZE,BRONZE,SILVER,SILVER,SILVER,SILVER,SILVER,SILVER,BRONZE,SILVER,SILVER,