Pikmin Bloomの新しいイベントで、フィンガーボードをつけたピクミンがでてくるものが始まりました。昨年4種類が登場していて、今回追加で3種類が増えました。一様にランダムにでてくるとして、全てをそろえるには何匹ひっこぬけばいいのかをシミュレーションしてみました。
simulate <- function (types, start){
pikumins <- c(rep(1, start), rep(0, types - start)) # すでにもっている数をstartとして、その出現回数を1とする
while(any(pikumins < 1)){ # どれかのピクミンが1未満の場合は新しいピクミンを引っこ抜く
p <- ceiling(runif(1) * types) # どのピクミンが引っこ抜かれたか
pikumins[p] <- pikumins[p] + 1 # 引っこ抜かれたピクミンの回数を増やす
}
return(sum(pikumins) - start) # 引っこ抜いたピクミンの合計
}
try <- sapply(rep(7, 1e4), simulate, start = 4) # 7はピクミンの種類。1万回シミュレーションを行う
mean(try)
median(try)
残り3種類でも平均で13回引っこ抜かないとだめなことがわかります。0から始めるときは18だったので、持っていたピクミンの数だけ減ったという感じでしょうか。
# 度数分布図
options(repr.plot.width=4, repr.plot.height=3) # jupyterlabでグラフを小さくするための命令
hist(try, xlab='引っこ抜いたピクミン', ylab = '度数', main = '')
d <- data.frame(cumsum(table(try)))
plot(as.numeric(rownames(d)), d[,1] / 1e2, type = 'b', pch = 20,
xlab = '引っこ抜いたピクミン', ylab = '累積割合 (%)', main = ''
)
sapply(c(0.5, 0.9), function (n){
head(rownames(d)[d[,1] / 10000 > n],1)
})
累積割合は上のようになります。残り3種類をそろえるのに引っこ抜いたピクミンの数が11匹までが50%、22匹までで90%という感じです。頑張ってください。