☖ 詰将棋解答プログラム
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 にしたがい、ご自由にお使いいただいて結構です。
ツィート |
🕍 同ジャンル最新記事(-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』がなかなかよかったので... |