賭ケグルイ(双)の1巻に、スリーヒットダイスという賭けがある。
賭ケグルイ双(漫画)- マンガペディア
聚楽幸子が提案したゲーム。ダイスの123を「DOWN」、456を「UP」として扱い、プレイヤーはDOWNとUPの「連続する3つの出目」を予想してカードに書き、ディーラーが1つのダイスを振り続け、予想した3つの出目が先に出たプレイヤーの勝ちというルール。DOWNは「D」、UPは「U」として表記する。例としてプレイヤー1「UDD」対プレイヤー2「DDU」という予想の勝負であれば、ダイスの出目が「1(D)4(U)5(U)2(D)3(D)」という順番で出現するとなると、523の出目でUDDが成立しプレイヤー1の勝利となる。
DかUが出る確率は各々で、それらが3連になるのはいずれも だろうと思っていたら、「これは典型的な確率の錯誤」とアメリが言っており、かつ、「連続する3つの出目」のほかにも「出目同士の相性」もあるという二段構えである。
シミュレーションではDUU、DDU、UUD、UDDが早めに出やすく、UDU、DUDがやや遅く、UUU、DDDが最も回数を要する。
次に、出目で勝てるかどうかを確かめてみる。最速で出目が出るからといって常に勝つとは限らない。例えば、DUUは最速(平均 8回、最頻値 7回)で出るが、UDUに勝てるかどうかは五分五分であるし、DDUに対しては しか勝てない。
UUUはDUUに しか勝てない。というのも、UUUがDUUに勝てるのは最初から3回目までUUUの時だからである。
通りの出目の賭け方で、平均的に最も勝てるのはDUUかUDD、ということになる。
→相手
↓
自分
UUU | DUU | UDU | DDU | UUD | DUD | UDD | DDD | |
UUU | 0.000 | 0.124 | 0.403 | 0.299 | 0.499 | 0.416 | 0.397 | 0.503 |
DUU | 0.876 | 0.000 | 0.503 | 0.333 | 0.753 | 0.502 | 0.500 | 0.601 |
UDU | 0.597 | 0.497 | 0.000 | 0.375 | 0.334 | 0.499 | 0.497 | 0.583 |
DDU | 0.701 | 0.667 | 0.625 | 0.000 | 0.501 | 0.664 | 0.248 | 0.497 |
UUD | 0.501 | 0.247 | 0.666 | 0.499 | 0.000 | 0.625 | 0.665 | 0.701 |
DUD | 0.584 | 0.498 | 0.501 | 0.336 | 0.375 | 0.000 | 0.500 | 0.603 |
UDD | 0.603 | 0.500 | 0.503 | 0.752 | 0.335 | 0.500 | 0.000 | 0.874 |
DDD | 0.497 | 0.399 | 0.417 | 0.503 | 0.299 | 0.397 | 0.126 | 0.000 |
ud <- c("U", "D") ud3 <- apply(expand.grid(ud, ud, ud), 1, paste, collapse="") n <- 30000 s_generator <- function(size=300){ tmp <- sample(ud, size=size, replace=TRUE) s <- apply(mapply(function(z) tmp[z:(length(tmp)-3+z)], 1:3), 1, paste, collapse="") return(s) } s0 <- replicate(n, s_generator()) s1 <- mapply(function(z) match(ud3, s0[,z]), seq(ncol(s0))) m1 <- rowMeans(s1, na.rm=TRUE) + 2 m2 <- apply(s1, 1, median, na.rm=T) + 2 rownames(s1) <- ud3 s2 <- mapply(function(z) table(factor(s1[z,], 1:max(s1, na.rm=TRUE))), seq(ud3)) cols <- jet.colors(length(ud3)) txt <- sprintf("%s (mean=%d, median=%d)", ud3, round(m1), m2) par(mar=c(5, 5, 2, 2)) matplot(seq(nrow(s2))+2, s2/n, type="l", xlim=c(0, 49), col=cols, lty=1, lwd=4, cex.lab=1.3, xlab="最初に3連組み合わせが出現するサイコロ施行回数", ylab="density") # legend("topright", legend=ud3, pch=15, col=cols, ncol=2, cex=2) legend("topright", legend=txt, pch=15, col=cols, ncol=1, cex=1.1, y.intersp=1.5) # 勝負 res <- diag(0, length(ud3)) rownames(res) <- colnames(res) <- ud3 for(i in 1:n){ m <- match(ud3, s0[,i]) for(j in seq(ud3)){ res[j, -j] <- res[j, -j] + (m[j] < m[-j]) } } # 勝率 round(res/n, 3)