goo blog サービス終了のお知らせ 

パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

囲碁クエストの棋譜データから終局時の盤面を作成

2019-09-28 | Python

囲碁クエストの対局結果を表示するプログラムをcolaboratoryで作成してみました。

1)囲碁クエストで対局

2)結果をgoogle driveにアップしてダウンロード

3)対戦データを文字列変数化

4)データーをプログラムにしやすいように変換

5)9x9の盤面データを作成して打ち手を置いていく

6)最後に結果表示

ここまでが最初のリストです。まだ取りの判定が入っていません。

検証用の対局後の画像

 

取りの判定は迷路の探索と同じアルゴリズム

打った石の周り(上下左右)に石があれば探索スタートです。

上下左右に同じ色の石を探索していき、空きがあれば探索終了

空きがなければ、探索した石を取って、その数を計算しています。

 

def get(board,p):
  #検索して空きがなければ取りになる 自爆手はないものとする
  if board[p] in [".","#"]:return 0,0,board
  sp,dp=[p],[p]
  koma=board[p]
  while sp!=[]:
    p=sp.pop(0)
    for d in [-1,1,11,-11]:
      np=p+d
      b=board[np]
      if b==koma and not(np in dp):sp+=[np];dp+=[np]
      elif b==".":return 0,0,board
  g=len(dp)
  for p in dp:
    board=board[:p]+"."+board[p+1:]
  if koma=="o":return 0,g,board
  else:return g,0,board

t1="(;GM[1]SZ[9]KM[7]RU[Chinese]RE[W+-2.0]"
t2="PB[sa... (1445)]"
t3="PW[fi... (1427)]"
t4=";B[df];W[gd];B[ec];W[fg];B[gc];W[dg];B[cg];W[ef];B[de];W[fd];B[fc];W[ed];B[dd];W[dh];B[ch];W[hc];B[hb];W[hd];B[di];W[ei];B[eh];W[ci];B[eg];W[fh];B[bi];W[bh];B[di];W[cf];B[bg];W[bf];B[ah];W[cc];B[dc];W[cd];B[ce];W[be];B[bc];W[bb];B[bd];W[cb];B[ae];W[ac];B[af];W[db];B[eb];W[ib];B[ha];W[ee];B[gb];W[ic];B[da];W[ci];B[ad];W[di];B[ab];W[ia];B[ba];W[];B[ca];W[];B[])"
#まずプレイヤー名の抽出
p1,_=t2[3:].split()
p2,_=t3[3:].split()
#指し手をデータに保存
te=t4[1:-1].replace("B[","").replace("W[","").replace("]","").split(";")
#print(te)
#さらにわかりやすく変換
tdata=[]
for t in te:
  if t=="":tdata+=[(-1,-1)]
  else:
    tdata+=[(ord(t[0])-ord("a"),ord(t[1])-ord("a"))]
#print(tdata)
#ただ打ってみる
pg1=0
pg2=0
board="#"*11+"#.........#"*9+"#"*11
k="ox"
for n,t in enumerate(tdata):
  x,y=t
  if x==-1:continue
  p=x+1+(y+1)*11
  board=board[:p]+k[n%2]+board[p+1:]
  for d in [-1,1,-11,11]:
    g1,g2,board=get(board,p+d)
    pg1+=g1
    pg2+=g2
#結果表示
for y in range(11):
  print(board[y*11:y*11+11].replace("#"," "))
print(p1,pg1)
print(p2,pg2)

 

実行結果

 

検証画面

 


最新の画像もっと見る

コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。
ブログ作成者から承認されるまでコメントは反映されません。