cshogiという便利なツールがある.詳しくはリポジトリ,Documentation,そして作者様のブログを見てほしい.
(問題) https://tadaoyamaoka.hatenablog.com/entry/2019/10/28/233237 このブログポストに書かれているColabのプロジェクトを動かそうとしたが,棋譜の可視化のところがうまくいかなかった.サンプルコードではcshogi.KIF.Parserオブジェクトが下図や*1のようにリスト内のdictオブジェクトっぽくなっているが,
2024年現在のcshogiの実装だと以下の実行結果のようにTypeError: 'Parser' object is not subscriptableエラーが出てしまう.
現在の実装を見てみると,cshogi.KIF.Parser.movesメソッドがUSIの値を返さずに内部で用いられているint型の値(https://tadaoyamaoka.github.io/cshogi/cshogi.html#cshogi.to_usiによると,move (int) – A move represented as an integer.
)を返すように仕様変更されているようである.
(解決策) cshogi.to_usi(),またはcshogi.move_to_usi()が内部のint型の値をusi形式に直してくれるっぽい(to_usiはbyte型,move_to_usiはstr型で返ってくる),また,cshorgi.Boardクラスのpush_usiメソッドらは内部のint型の値を返してくれるっぽい(つまり,cshogi.move_to_usi()と cshorgi.Board.push_usi( )は逆のメソッド)ので,上記のブログのColabのコードの可視化の部分は
from IPython.display import SVG, display board = Board() for usi in kif[0]["moves"]: move = board.push_usi(usi) display(SVG(board.to_svg(move)))
ではなく,簡潔に
from IPython.display import SVG, display board = Board() for move in kif.moves: display(SVG(board.to_svg(move)))
で動いた.
サンプルコードはこちら
[{'moves': ['3g3f', '6a7b', '4i4h', '7c7d', '6i7h', '4a3b', '5g5f', '5c5d', '3i3h', '7a6b', '4h5g', '3a4b', '5g4f', '4b5c', '7i6h', '5c6d', '6h5g', '6d7e', '7g7f', '3c3d', '8h2b', '7e6f', '2b3a+', '6f7g+', '3a4b', '5a6a', '4b3a', '7g7h', '3a4b', 'G*7e', '4b3a', '6a5b', '3a4b', '5b4b', 'B*5a', '4b5c', '5a1e+', '5c6d', '1e4b', 'B*5c', '4b3a', '7e8e', '3a4b', '8e9f', '4b3a', '9f9g', '9i9g', '7h6h', '5i4h', '6h7i', 'G*3e', '7i8i', '3a4b', 'N*4d', '4b3a', '8c8d', '3a4b', '8b8c', '4b3a', '8c7c', '3a4b', '2c2d', '4b3a', '3b2c', '3a4b', '7b7a', '4b3a', '5c3a', '3e2e', '3a5c', '2e1d', 'B*5i', '4h4i', '7a8b', '4i3i', '8b8c', '1d1c', '1a1c', '3i4i', 'G*7e', '4i3i', '7e8e', '3i4i', '8e9f', '4i3i', '8c9d', '3i4i', 'P*1h', '4i5h', '9f9g', '4f3e', 'L*8b', '5g4f', '9a9b', '3e2e', '1c1d', '2e1d', '2c1c', 'L*6f'], 'names': ['dqn', 'dqn'], 'sfen': 'lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1', 'win': 'b'}]
*ちなみにKIFファイルについて: 棋譜ファイル KIF 形式