##問題
##回答
1個塗るとき、白マス8個の前後と間計9か所に、黒マスを1個入れればよい。
$$\binom{9}{1}=9$$
2個塗るとき、白マス7個の前後と間計8か所に、黒マスを2個入れればよい。
$$\binom{8}{2}=28$$
k個塗るとき、白マス9-k個の前後と間計9-k+1か所に、黒マスをk個入れればよい。
$$\binom{10-k}{k}$$
黒マス | 白マス | 通り数 |
---|---|---|
1 | 8 | 9 |
2 | 7 | 28 |
3 | 6 | 35 |
4 | 5 | 15 |
5 | 4 | 1 |
Total | 88 |
##Rで検証してみよう
> event.all <- expand.grid( c(0,1), c(0,1), c(0,1), c(0,1), c(0,1), c(0,1), c(0,1), c(0,1), c(0,1) )
> # 白か黒か、白は0 黒は1
> exam <- matrix( 0, nrow(event.all), ncol(event.all)-1 )
> for ( i in 1:(ncol(event.all)-1) ) {
+ exam[,i] <- event.all[,i] * event.all[,i+1]
+ }
> # 隣の列と掛け算をする。黒マスが連続出る場合、積が1となる。連続でない場合、積が0となる。
> sum( apply(exam, 1, sum) == 0 ) - 1
[1] 88
> # 積の和が0であれば、連続に塗られていない。値が0である数kは全通りの数である。少なくとも1つの黒マスを塗るので、k-1は答えとなる。
##コード
code.r
event.all <- expand.grid( c(0,1), c(0,1), c(0,1), c(0,1), c(0,1), c(0,1), c(0,1), c(0,1), c(0,1) )
# 白か黒か、白は0 黒は1
exam <- matrix( 0, nrow(event.all), ncol(event.all)-1 )
for ( i in 1:(ncol(event.all)-1) ) {
exam[,i] <- event.all[,i] * event.all[,i+1]
}
# 隣の列と掛け算をする。黒マスが連続出る場合、積が1となる。連続でない場合、積が0となる。
sum( apply(exam, 1, sum) == 0 ) - 1
# 積の和が0であれば、連続に塗られていない。値が0である数kは全通りの数である。少なくとも1つの黒マスを塗るので、k-1は答えとなる。