詰将棋解答プログラム

詰将棋解答プログラム
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.1.254/js4/jsshogi.cgi?hisha=20... というように、駒の名前と位置・状態の情報がつづいているものです)。

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

fname = '1.txt'

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

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

 $ python jshogi.py

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

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

コメント  記事が気に入ったらいいねしてね! 0  13  

Facebookシェア   
以前作って note に置いていた、専用サイトやアプリによらず、自分の PC から AI に直接質問する CGI を複数行、特殊な文字にも対応するように拡張してみました...
私は 3年前に詰将棋に解答する python スクリプト mshogi.py を作ったが、この度、本腰を入れて書き直し、スピードアップも実現。プログラムはフリーで GPL に従い配布する...