詰将棋解答プログラム

2024/10/28

詰将棋解答プログラム  3年前に詰将棋に解答する python スクリプト mshogi.py を書きました。 5手詰めなら 1秒以内、7手詰めならだいたい 20秒以内で解けましたが、 9手詰めとなるとかなりかかり、pypy を使っても難しいと 40秒くらいかかっていました。 コードが行き当たりばったりで汚いこともあり、公開を憚っていましたが、 この度、本腰を入れて書き直し、スピードアップも実現したところで、 フリーウェアとして公開します (以下は日本将棋連盟のまいにち詰将棋 21/8/15 出題の9手詰め問題の解答時間の記録です)。 もし、C言語に移植すればさらなるスピードアップも可能でしょう。 試した範囲では、11手詰め、13手詰めも数秒で解けています。


名前 CPU環境 速度
mshogi.py python3版(2021) Ryzen7 3700X 280秒
mshogi.py pypy版(2021) Ryzen7 3700X 38秒
mshogi.py python3.8版(現在) Ryzen7 3700X 30秒
jshogi.py python3.8版(現在) Ryzen7 3700X 3秒
jshogi.py pypy版(現在) Ryzen7 3700X 3秒
jshogi.py python版(現在) Ryzen9 7900X3D 1秒

プログラムは Python が動きさえすれば、どこでも実行可能できます。 使い方はjshogi1.00.zip をダウンロードし、readme.txt をごらんください。

 予想される使い方を書いてみます。 例えば 24/10/19 に行われた藤井竜王・佐々木八段の竜王戦の投了図以下の進行を調べるには、まずKIF形式の棋譜をダウンロードします。 つづいて、当サイトの JP 詰将棋のページを開き、[棋譜]ボタンからダウンロードした棋譜を読み込み、[▶▶]ボタンを押して103手目まで進めます。

 つづいて[保存]ボタンを押して、表示される URL を C-a で全選択し、C-c でコピーします。 コピーした内容を jshogi.py があるフォルダに ryuo.txt とでも名付けて保存します (これが jshogi データファイル形式です。中味は http://192.168.21.254/js4/jsshogi.cgi?hisha=20... というように、駒の名前と位置・状態の情報がつづいているものです)。

 次に、jshogi.py の最後あたりにある

fname = '1.txt'

の部分を、ryuo.txt という名前に直しておきます。

 続いてコマンドラインで以下のように実行します。

 $ python jshogi.py

 すると、解析が始まり、詰みの状態なら手順が示されるでしょう。 まいにち詰将棋 などに問題例を求めるのもいいかもしれません。

 本プログラムは無保証ですが、GPL にしたがい、ご自由にお使いいただいて結構です。

Facebookシェア

🕍 同ジャンル最新記事(-5件)

詰将棋解答プログラム(2024/10/28)

3年前に詰将棋に解答する python スクリプト mshogi.py をこの度、本腰を入れて書き直し、スピードアップも実現し...

TSNETスクリプト通信を読む(2023/12/23)

今から十数年前、私が所属していた TSNET というメーリングリストのグループがあります...

Python速度アップ考(2022/07/23)

Learnig Pythonの中で Pypy の速さに触れていますが、自分でも調べてみようと思い、本では触れられていない、Pypy での結果に加え、numpy, Cython, cupy でも計測して..

Learning Python(2022/07/16)

マーク・ルッツ著 Learning Python をざっと読みました。『はじめてのPerl』がなかなかよかったので...