将棋を始めた ので、詰将棋を毎日のように解いているのだけど、せっかくなら詰将棋の問題を自動生成してみたい、と思って試してみた。 前提知識 詰将棋とはどんなものか 攻め方(先手)が玉方(後手)の玉を詰ますのが目的。 攻め方は必ず王手をかける(玉方は必ず王手をはずす)。 玉方は盤上と攻め方の持駒以外すべての駒(ただし玉は除く)を合駒として使用できる。 玉方は最善を尽くし、最も長く手数がかかるように逃げる。 玉方は無駄な合駒をしない。 その他は指し将棋のルール通り。二歩、打ち歩詰め、行き所のない駒、連続王手の千日手はいけない。 (日本将棋連盟の詰将棋ページより) 手法 コンピュータによる詰将棋の解答・問題生成というのは20年くらい前から既に様々な論文などで研究されているようだ。生成については、主に「ランダム法」「逆算法」といった方式があるらしい。 あまり論文にちゃんと目を通して調べてはいないけど