マルバツゲーム
Posted feedbacks - Python
プレイヤーを単純な関数として実装しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | from random import choice
def p(d, x):
return choice([i for i, j in enumerate(d) if j == 0])
def w(d, i):
f = lambda l: [i] * 3 == l
return (f(d[:3]) or f(d[3:6]) or f(d[6:]) or
f(d[::3]) or f(d[1::3]) or f(d[2::3]) or
f(d[::4]) or f(d[2:7:2]))
def m(*p):
d = [0] * 9
for i in range(9):
x = i % 2 + 1
d[p[i%2](d, x)] = x
if i > 3 and w(d, x):
return x
return 0
r = [0] * 3
for i in range(10000):
r[m(p, p)] += 1
print 'draw: %d\n1st: %d\n2nd: %d' % tuple(r)
|



syat
#6190()
Rating4/4=1.00
マルバツゲームは3×3の格子に交互に○と×を書き込み、先に縦・横・斜めに記号をそろえたほうが勝ちというおなじみのゲームです。
「毎ターン乱数を使って手を決めるランダムプレイヤー同士を対戦させる」というのが今回のお題です。 1万回対戦させ、勝ち・負け・引き分けの数を表示してください。 そして先手が有利であることを確かめてください。
良い手を思考するプレイヤーについては別のお題にしようと思っています。 プレイヤーを簡単に差し換えることができる設計を目指してください。
[ reply ]