sfen文字列は一意に定まらない件

やねうら王 定跡フォーマット2016ではsfen文字列とそれに対応する(その局面での定跡となる)指し手をずらずらと書くようになっているのですが、sfen文字列は、一意に定まらないということをすっかり忘れていました。

というのも、手駒の出力順まではsfen文字列の仕様として規定されていないからです。すでにいくつかのソフトで違いがあるようです。価値の低い駒の順(歩、香、桂、銀、金、角、飛)に並べるのが普通の感覚だと思うんですけど(Bulnder.Converter)、そうでないソフトも結構あります。USIプロトコルの仕様の説明では駒の価値の高い順に並んでいて、ShogiGUIなどはこれに倣ってくるのだと思います。

また、Aperyや、やねうら王では駒番号を「歩、香、桂、銀、角、飛、金」の順番にしています。これは金だけが成れない駒なのでこの順番で扱えば、「成れる駒であるかどうか」という判定を「飛車の駒番号以下であるか」という判定で済ませることが出来るため、少し高速化できるからです。(本当に微々たるレベルの高速化ですが)

そんなわけでして、各々のソフトがすでに異なる状態のsfen文字列を出力しているわけですから、いまさらやねうら王 定跡フォーマット2016が「価値の低い駒の順(歩、香、桂、銀、金、角、飛)」であるようにしても仕方がないと思うわけです。

そこでまあ、やねうら王 定跡フォーマット2016のsfen文字列では、手駒は「歩、香、桂、銀、角、飛、金」の順番で出力してあるものとする、ということを仕様として追加することにさせていただきたいと思います。

→ 2016/7/15 24:00 追記  : sfen文字列は本来は一意に定まる件 にあるように手駒は「飛車、角、金、銀、桂、香、歩」の順番とします。

やねうら王 定跡フォーマット2016に対応したソフトが急増中!?

そう言えば、「(ソートされた)テキストファイルをバイナリサーチ出来る」というのは、いまどきは知らない(気づかない)人が多いのかも知れませんね。この技術自体は30年以上の昔のテキストエディタの実装にも使われていますが、現代においてはロストテクノロジーの類かも知れません。


sfen文字列は一意に定まらない件” への4件のコメント

  1. 使って当たり前過ぎるアルゴリズムは「必殺!バイナリサーチっ!」とか詠唱することなく使ってしまえるということのような。
    メモリをケチるために適当な小さいバッファに読み込んで、最後のレコードを見て読み進めるかバッファの中をバイナリサーチして探すかのようなバイナリサーチもどきを私はよくやりますしw

  2. これ確かUSIのドラフトには並び順(飛,角,金,銀,桂,香,歩)も規定されていたはず。元のサイトが無くなってるんで確認のしようがありませんが。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です