No.12852 ビンゴゲーム  【菊池】 2010/06/16(Wed) 21:51

Rについての質問です。
5×5行列のビンゴカードを作成し,x人で行ったときに,1番最初にBINGOになるまでに読み上げられた数字の個数を求める関数を作成したいのですが,ビンゴカードを作成するところまでしかできませんでした。
1〜75の中からランダムに数字を選び,一致したビンゴカードの数字を0に変えていき,行・列・対角線の和が0になったら終了,という関数を考えております。
以下は作成したビンゴカードです。是非ご教示いただけませんでしょうか.
bingo<-function(x){
m<-5
B<-sample(1:15,m)
I<-sample(16:30,m)
N<-sample(31:45,m)
G<-sample(46:60,m)
O<-sample(61:75,m)
BI<-matrix(c(B,I,N,G,O),nrow=5,ncol=5)
BI[3,3]<-0
BI
return(BI)
}

No.12855 Re: ビンゴゲーム  【青木繁伸】 2010/06/17(Thu) 05:18

以下のような感じで,30数行で書けます。変に具体化せず,抽象化に徹した方が良いですね。
sim <- function(n=1)
{
init <- function(n)
{
return(n 枚のビンゴカードを配列 array(foo, dim=c(5, 5, n)) で表現)
}
check <- function(x)
{
return(ビンゴになっているかどうかのチェック)
}
card0 <- card <- init(n)
number <- sample(99) # 振られる数を全部作っておく
bingo <- 0 # ビンゴになったカードの枚数
bingo.vec <- numeric(n) # ビンゴになったカード番号のベクトル
for (loop in 1:99) {
m <- number[loop] # 数字を一つずつチェック
for (k in 1:n) { # 各カードをチェック
カードに数字があるか
if (あったら) {
カードのその数字を 0 にする
if (ビンゴかどうか check でチェック) {
bingo <- bingo+1
bingo.vec[bingo] <- k
}
}
}
if (bingo) {
return(必要な結果を返す)
}
}
}

No.12856 Re: ビンゴゲーム  【菊池】 2010/06/17(Thu) 16:26

返信が遅くなり申し訳ございません。とても参考になりました。
ありがとうございました。

● 「統計学関連なんでもあり」の過去ログ--- 043 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る