「羽生さんが駒を一度も後退させずに勝った対局」の追試

羽生さんが駒を一度も後退させずに勝った対局 - inaniwa3's blog

を追試してみる

棋譜データは元記事と同様に2chkifu.zipをダウンロードして,適当なディレクトリに解凍しておく.更に,path に解凍したディレクトリを指定しておく.

In [1]:
import os
import sys
sys.path.append('./../../')

from pyogi.ki2converter import *
from pyogi.kifu import *
In [2]:
forking_csa_indexes = []

for n in range(0, 50000):
    
    path = '~/data/shogi/2chkifu/{0}000{1}/{2:0>5}.KI2'.format(n // 10000, int(n < 10000), n)
    kifile = os.path.expanduser(path)
    if not os.path.exists(kifile):
        continue
            
    ki2converter = Ki2converter()
    ki2converter.from_path(kifile)
    csa = ki2converter.to_csa()
    
    if not csa:
        continue
    
    kifu = Kifu(csa)
    
    if not kifu.extracted:
        continue
    
    if kifu.players[0] == '羽生善治':
        teban_habu = 0
        direction = 1
    elif kifu.players[1] == '羽生善治':
        teban_habu = 1
        direction = -1
    else:
        continue

    ## 羽生が勝っていない場合
    if (teban_habu == 1 and kifu.sente_win) or kifu.is_sennichite:
        continue
    
    moves = kifu.moves[teban_habu::2]
    
    for move in moves:
        ## 駒が後退したとき
        if (int(move[4]) - int(move[2])) * direction > 0 and int(move[2]) != 0:
            break
    else:
        forking_csa_indexes.append(n)
        print(n)
        kifu.print_state(mode='mpl')
        
print(forking_csa_indexes)
311

685

1600

6521

7639

35267

45018

[311, 685, 1600, 6521, 7639, 35267, 45018]

羽生さんが駒を一度も後退させずに勝った対局 - inaniwa3's blog中の出力結果

00311.csa 00685.csa 01600.csa 06521.csa 07639.csa 35267.csa 45018.csa

と完全に一致する.

In [3]:
%load_ext version_information
%version_information matplotlib
Out[3]:
SoftwareVersion
Python3.4.2 64bit [GCC 4.8.2]
IPython2.4.1
OSLinux 3.13.0 55 generic x86_64 with debian jessie sid
matplotlib1.4.3
Sat Jun 27 14:21:46 2015 JST