pos形式ファイルフォーマットについて
コンピュータ連珠世界選手権では、棋譜のデータを扱うファイル形式としてpos形式
を用いる。ここではpos形式のフォーマットについて説明する。
フォーマットは非常に単純で、まず、1バイト目に現在、何手目まで局面が進行しているかをあらわす値 0-224 が入る。
続いて、手数分の石の位置情報が続く。石の位置は下図に示すように左上を0として
右に、1.2.3...と続き、右下が224となる。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
.....
.....
.....
.........................................224
ちなみに天元は 112(0x70)です。
これを左上を(0,0)、右下を(14,14)
とするX-Y座標に直すには
X = n % 15
Y = n / 15
となる。
五珠二カ所打ち実装
連珠正式ルールに対応するには、三手目で仮後手が黒か白を選択する、珠型交代と、
五手目に黒が石を二つ打って白がどちらかを取り除くという、五珠二カ所打ちにを実装
する必要がある。
特に、五珠二カ所打ちでは二カ所に石を打つ際、対称になってはいけない。ここで言う対称は、盤の端を考慮せずに判断する。つまり、盤が無限に続くと考えて判断するのである。
例えば、下図は盤の端を考慮すれば対称とは言えないが、考慮しなければ、対称である。よって打ってはならない。
ちなみに五手目の2カ所のポイントが5及び6である。
図1
上図は点対称の例であるが、下図のように線対称な場合も打ってはならない
図2
対称といっても、5手目と6手目が対称の位置に無ければ、全体が対称であっても
打っても良い。その例が下図である。
数学的には下図は対称である。しかし、5手目と6手目が対称軸に対して座標変換
した際、互いが互いの写像になっていないので問題ないのである。
これを連珠的に言えば、どちらを取り除いても(盤の端を考慮せずに)意味が同じになってしまうところに打ってはならないと言うことである。
図3
対称性の判断にはまず、盤の石のある部分だけの長方形領域を求める。
盤の端を考慮しないということは、盤が無限に続くとも考えられるが、
盤の石のある位置だけで判断すると考えることも出来るためである。
次に、長方形領域の中心を0,0として座標をつける。
5*5ならば以下の通りである。
-2-1 0 1 2
-2
-1 ○●
0 ●○
1 ●
2 ●
写像を求めるには座標変換を行う。変換前の座標をx, y、変換後の座標を
xx,yyとすれば、
xx = x, yy = y
xx = -x, yy = y
xx = x, yy = -y
xx = -x, yy = -y
xx = y, yy = x
xx = -y, yy = x
xx = y, yy = -x
xx = -y, yy = -x
の8通りが考えられる。
これらの変換を行い、打ってある全ての石が自分の8通りの写像のいずれかに
マッチングすれば、図形は対称であるといえる。
問題は、中心点が求められない場合である。
具体的には図1のような場合である。
それでも上記変換を行うために仮想の原点を追加する処理を行った。
x >= 0の場合x + 1、y >= 0の場合y + 1を行うと
-2-1 0 1 2
-2 ●
-1 ○●
0 ●○
1●
2
は
-2-1 0 1 2
-2 ●
-1 ○ ●
0
1 ● ○
2●
になる。
こうすれば、先ほどの座標変換が使えるというわけだ。
しかし、落とし穴もある。
例えば下図である。
図4
この図に仮想の原点を足場合x = 10のところに空白列を挿入した形
つまり、図5のようになる。
図5
もともと対称でない図形を間違って対称と判断してしまう。
これはもともと長方形だったという情報が欠如しているためである。
よって、まず、x,yに関して、石のある範囲のx,yの値
が偶数か奇数かをそれぞれ求め、その情報を保存しておく。
偶数の場合は、仮想の原点軸を挿入する。
そして、8通りの座標変換のうち4つまでを行う。
残りの4つはxとyの入れ替えを伴うものであり、もともと石のあった領域が
長方形(正方形でない)場合、x,yの入れ替えによる対称はあり得ない。
そこで、先ほど保存した、挿入処理前の石のある範囲の値のx yが等しくない
場合は、残りの4つの変換による比較は行わない。
これで対称性の判断が出来る。
もっともこれだけでは図3も対称になってしまうので
(対称なのだが)
5手目の写像が6手目、になっているかを最後に確認する。
図6
ちょっと気になるのが、図6と図5が全く同じ形に変換されたのち比較される
という点だ。これの弊害が無ければ良いと思いながら、反例を探したが、
今のところ見つかっていない。