サイトに局面図を表示したい都合で局面図スクリプトを作っていたら、局面ハッシュ(圧縮)を再考してみたくなったので再考してみました。そのうち何らかの形でサイトの方にまとめると思います。
このハッシュは可逆ハッシュで、34 文字(204 ビット)で 1 つの局面を表すことができます。1 文字あたり 6 ビットを割り当てて、文字は Base64url と同じものを使います。この場合表現できる状態の数は $2\times 10^{61}$ ということになりますが、以前シェルトの合法局面数を計算(ページ作成中)したところ $8\times 10^{49}$ という値になったので、やろうと思えばもっと縮められるはずということになります。ただ、ここから縮めようとするとちょっと面倒なことにならざるを得ない感じだったので、やめることにしました。
このハッシュは、手番情報と方向転換情報からなる先頭 5 文字($1+29$ ビット)と、1 文字あたり 1 つの駒の状態を表した 29 文字を合わせた計 34 文字からなります。手番情報は、次の手番が先手か後手かを表すもので、方向転換情報は、29 の駒が方向転換しているかどうかを(方向転換不能な駒も含めて)表すものです。この場合、1つの駒がとりうる状態は盤上のマス(49 通り)と持ち駒台と張り駒台と駒箱の計 52 通りなので、ちょうど 1 文字で表せることになります。
この仕様だと 1 文字に 1 つの駒の情報が(方向転換を除いて)対応するうえビットが余りなく(6 ビットで区切る場合)使い切られるので、個人的に扱いやすそう&まとまってる感があります。駒の情報の並びについては使徒の順(dia, vio, lis, …)にすることを考えました。なお後衛の方向転換情報を取り除くと 2 文字削れて 32 文字(2 ビット余り)になります。この場合は駒の情報の並びは開始局面に倣ったもの(pal, ful, mik, …)にしたほうが分かりやすそうです。