あとだしじゃんけんを見破る

  • グリコを赤・黒の2人でやっている
  • 赤が後だししているかもしれない
  • ただし、赤は後だしをするゲームとしないゲームを分けている
  • しかも、赤はいつも後だしをするわけではなく、何度かに1度だけ後だしをしているらしい
  • 10回、グリコを繰り返して記録をつけた
  • さて、赤はこのうち何回後だしをしたか、当たるだろうか?
  • 1ゲームあたりのじゃんけんの回数が増えれば、当たるが、それほどでないときは、当たるとは限らない

# あとだしじゃんけん
# 1ゲームあたりのじゃんけんの回数(あいこの回数を含む)
n <- 1000
# 2名グリコの進む歩数のための行列
m <- matrix(c(0,3,0,0,0,6,6,0,0),byrow=TRUE,3,3)
# 赤が後だしをするとしたら、その割合
cheat.p.0 <- 0.1
# ゲーム回数
n.rep <- 10
# どの回を「後だしをする回にするか」を選ぶ
when.cheat <- sample(0:1,n.rep,replace=TRUE)
# 記録用紙
A.list <- B.list <- list()
# やってみよう
for(j in 1:n.rep){
	cheat.p <- cheat.p.0 * when.cheat[j]
# A:黒、B:赤
	A <- c(0)
	B <- c(0)
# 二人のじゃんけんの「手」
	a <- sample(1:3,n,replace=TRUE)
	b <- sample(1:3,n,replace=TRUE)
	for(i in 1:n){
		tmp <- runif(1)
		if(tmp>cheat.p){
			A <- c(A,A[length(A)] + m[a[i],b[i]])
			B <- c(B,B[length(B)] + m[b[i],a[i]])
		}else{
			A <- c(A,A[length(A)])
			B <- c(B,B[length(B)] + max(m[,a[i]]))
		}
	}
	A.list[[j]] <- A
	B.list[[j]] <- B
}

par(mfcol = c(2,n.rep/2))
for(j in 1:n.rep){
	matplot(cbind(A.list[[j]],B.list[[j]]),type="l",main = paste("",j))

}
# 後だしの回数
sum(when.cheat)
# 後だししたのはいつか
when.cheat
  • 掲載図の場合の正解は10回中、4回(1,2,7,8回目)
> sum(when.cheat)
[1] 4
> when.cheat
 [1] 1 1 0 0 0 0 1 1 0 0