野球の得点と2進法

  • こちらのこと
  • こちらにて、野球の進塁パターンを2進法で表わしている
  • たとえば、101は3塁と1塁にランナーがいる場合
  • ここで、3塁打が出ると101100と上位桁に押し出される
    • これはどういうことか、i-ヒットを打者がi-thベースに進塁するヒットであるとする。これは以下の2つの行為の複合であることがわかる
      • それを実現するためには、すでに塁を埋めている選手をi塁分、進塁させる行為と
      • 自身がi-thベースに納まる行為
    • i-塁分の進塁は、2進法でいえば、2^i倍すること。10進法でいえば、10^i倍すること、n進法で言えば、n^i倍すること。これは、こちらで言われている通り。
    • i-thベースに納まることは、n^{i-1}を加える行為
    • ここで、n進法にした。これはどういうことか。
      • 1つのベースに1人しかいられなければ2進法、2人までたまって、あふれた分が進塁するなら3進法、n-1人ためてから進塁させるならn進法。
    • また、進塁させる行為と、自身が塁に出る行為とを分離すれば、送りバントやスチールも演算としてあらわせるようになる。併殺も。
  • 得点は、第4以上の桁のビットの数
  • それは、2進法で言うところの、1000で割った商
  • スリーアウトでイニングが変わるときは、下3桁を0にする:これは、下3桁での切り捨て
  • 多分、以下はワークする
# ベクトルの第一スロットが1の桁であることに注意
# 0,1のベクトルを作る
# 1,2,3が1,2,3塁
a<-sample(c(0,1),7,replace=TRUE,prob=c(0.4,0.6))
a
# 塁を空にする(スリーアウト)
a[1:3]<-0
a
# 試合終了時に得点を数える
# 4以上桁を作る
c<-a[4:length(a)]
c
# cから、得点人数を出す
#これは嘘
v<-sum(c*2^(0:(length(c)-1)))
# こちらが本当
v<-sum(c)
v
  • ソースを少し単純に
b1<-c(0.1,0.2,0.3,0.3,0.1) # バッターの打率ベクトル
nb<-9 # バッター人数
batter<-matrix(rep(b1,nb),nrow=nb,byrow=TRUE) # バッターの打率行列
hit.pattern<- c(0,1,2,3,4)
size<-10000 #打席用乱数(十分数を…)
# 乱数を行ごとに発生してヒットなどの内訳を
Rands<- t(apply(batter,1,sample,x=hit.pattern,size=size,replace=T))
# Randsマトリックスの次元を確認
dim(Rands)
# batter別の 0,1,2,3,4 本数を確認
apply(Rands,1,table)