どんなものか攻め方(先手)が玉方(後手)の玉を詰ますのが目的。攻め方は必ず王手をかける(玉方は必ず王手をはずす)。玉方は盤上と攻め方の持駒以外すべての駒(ただし玉は除く)を合駒として使用できる。玉方は最善を尽くし、最も長く手数がかかるように逃げる。玉方は無駄な合駒をしない。その他は指し将棋のルール通り。二歩、打ち歩詰め、行き所のない駒、連続王手の千日手はいけない。(日本将棋連盟の詰将棋ページより)手法コンピュータによる詰将棋の解答・問題生成というのは20年くらい前から既に様々な論文などで研究されているようだ。生成については、主に「ランダム法」「逆算法」といった方式があるらしい。実際に利用できそうな公開されているプログラムが見当たらなかったので、自分で作ってみることにした。手法について調べる前に最初に思いついたのが逆算法だったので、その方式で。逆算法は、詰みの状態から巻き戻すような形で問題を生成していくので、まずは最終的な「詰み」の形を生成する。一般的な詰将棋ということで玉は攻め方(先手)は無しで後手側だけに存在する前提。何も考えずそれ以外の38個の駒をランダムに配置してみよう。...まず二歩があるし、王手もかかってないし、関係ない駒が多すぎる。先手だと1段目に歩・香車、2段目以下に桂馬、などは有り得ない成らせる、もしくは後手側に変えてしまう成駒を追加せっかくなので成れる位置に居る駒は適当な確率で成らせる飛車・角はもうちょっと下の方でも成って良いことにするこれで一応、有り得なくはない局面になった...かな。王手になっている状態のものは出るけど、「詰み」の状態にはなかなか遠い。関係ない場所に居る駒が多すぎる。以下の条件を追加する。後手側の玉の位置を1〜4筋、1〜4段に限定その他の駒を、その近くに集中させる惜しい!王手すらかかってない!OK!感覚としては、上述の条件で10回程度試行すれば、「詰み」の状態は得られるようだった。ところで「詰み」とは。王手がかかっている状態であり、どう応じても必ず王が取られてしまう状態どの応手を選択しても王手状態から逃れることができないというロジックで判定する必要がある。影響を受けない駒を取り除いて後手側の持駒にする。いえ最終的に出来上がる問題には効果のある位置にある駒もあるかもしれないので、すべては取り除かず、確率として8割程度を消す感じで。した「詰み」状態になっている。ここから、先手側を1手「戻す」ことで王手状態でなくなれば、それを辿る手が正解となる1手詰の問題が出来上がる、はず。1手前の有り得る状態、とは。持駒を使う場合もしかし打ち歩詰めは回避するたとえば歩が一歩手前に居るかもしれないし、成っていない駒は持駒の中から打たれたものかもしれない。成駒なんかは金の動ける範囲での前の位置かもしれないし、桂馬が跳ねてそこに成ったものかもしない、など色んなパターンを考慮する必要はある。生成すべきは1手詰の問題なので、1手前は「王手ではない」状態になっている必要がある。上図の場合は必然的に3四の龍が別の位置に居た、という状態が選ばれることになるだろう。どこかに居た状態であれば、王手ではないので大丈夫そう。いうわけで出来たのが上図。動けば玉はどこにも逃げられず、詰みとなる。いうわけで改めて、問題に関係ない、取り除いても問題ない駒を排除する。ついでに、成香・成桂など通常の問題図にはあまり現れない慣習がある?ので、微妙な成駒は金将やと金があればそれに置き換えるなどの処理をする。