challenge マルバツゲーム

マルバツゲームは3×3の格子に交互に○と×を書き込み、先に縦・横・斜めに記号をそろえたほうが勝ちというおなじみのゲームです。

「毎ターン乱数を使って手を決めるランダムプレイヤー同士を対戦させる」というのが今回のお題です。 1万回対戦させ、勝ち・負け・引き分けの数を表示してください。 そして先手が有利であることを確かめてください。

良い手を思考するプレイヤーについては別のお題にしようと思っています。 プレイヤーを簡単に差し換えることができる設計を目指してください。

Posted feedbacks - R

初めて投稿します。

そろっているかの判定には[1..100]>>=penさんの6228を利用させてもらいました。

> table(sapply(1:1000,function(x){marubatu()}))

Player1 Player2 draw

571 295 134

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
marubatu <- function(){
  prime <- c(2*7*17,2*11,2*13*19,3*7,3*11*17*19,3*13,5*7*19,5*11,5*13*17)
  my_rand <- sample(9,9)
  ban <- c()
  for(i in seq(9)){
    if(i %% 2 != 0){
      vec <- prime[(my_rand[((1:9) %% 2) * (1:9)])[(1:((i+1)/2))]]
      if(c(2*3*5*7*11*13*17*19)^2 %% prod(vec) != 0){
        return("Player1")
      }else{}
    }else{
      vec <- prime[(my_rand[(1-((1:9) %% 2)) * (1:9)])[(1:(i/2))]]
      if(c(2*3*5*7*11*13*17*19)^2 %% prod(vec) != 0){
        return("Player2")
      }else{
      }
    }
  }
  return("draw")
}

table(sapply(1:10000,function(x){marubatu()}))

Index

Feed

Other

Link

Pathtraq

loading...