四ノビや終端チェックを簡素化するためにREAL Coreでは「正規性」と呼ぶ概念を導入しています。
といっても、それほど難しい話ではなく
- 相手の四ノビは見落とさない
- 相手に達四、四々がある、または四ノビを防ぐ手が禁手の時は投了する
という「ちょっとだけ賢い」対局者を仮定することでチェックを簡素化しています。
詳細はGitHub上にありますがここでは正規性、終端局面の定義とその性質を紹介します。
正規性の定義
ある局面での着手が正規手(Normal move)であるとは以下の条件を満たすことを言います。
- 着手位置が空点もしくはPassであること
- 【黒番のみ】禁手でないこと
- 相手に四がある場合、その防手であること
- ただし、相手に達四がある場合は着手せず投了する
- 【黒番のみ】相手に四々がある場合は着手せず投了する
- 【黒番のみ】四の防手が禁手の場合は着手せず投了する
ある局面が初期盤面(1珠もない状態)から正規手の連続でその局面に到達できる場合、正規局面(Normal position)と呼びその手順を正規手順(Normal sequence)という。
終端局面の定義
局面を正規局面とし着手[math]m[/math]は正規手とする。以下の条件を満たす時、着手[math]m[/math]を終端手(Terminating move)といい[math]m[/math]を着手後の局面を終端局面(Terminated position)と呼ぶ。
- 以下のいずれかが成立すること
- 達四ができること
- 【白番のみ】四々ができること
- 【白番のみ】四ノビで禁手に極めること
正規性の性質
正規性を仮定するといくつか良い性質を保証することができます。
ある局面が正規局面とすると四があるならば直前手で出来た四である。
この性質から相手の四ノビする手は直前手のみチェックすれば良いことが分かります。また、終端手の定義から
四ノビする手でないならば終端手ではない
なので終端手のチェックは四ノビする手に限定してOKです。最後に対局者が正規手を打つと仮定すると以下が成立し終端手チェックの正当性が保証されます。
両対局者の指し手がすべて正規手の場合、終端局面に導くことと勝ちになることは同値である。
ピンバック: 限珠案での余詰検出 | 連珠プログラム(Quinstella, REAL Core)開発ブログ
ピンバック: ツークツワンク「ドンベ6789」 | 連珠プログラム(Quinstella, REAL Core)開発ブログ
ピンバック: 着手の禁手判定 | 連珠プログラム開発ブログ
ピンバック: ツークツワンク:ドンベ6789 | 連珠プログラム開発ブログ