やねうら王 定跡フォーマット2016ではsfen文字列とそれに対応する(その局面での定跡となる)指し手をずらずらと書くようになっているのですが、sfen文字列は、一意に定まらないということをすっかり忘れていました。
SFENで先手の持ち駒が角金歩のときの表記。
BGP : ShogiGUI, 局面ペディア
PGB : Blunder.Converter
PBG : やねうら王定跡フォーマット2016— merom686 (@merom686) July 14, 2016
というのも、手駒の出力順まではsfen文字列の仕様として規定されていないからです。すでにいくつかのソフトで違いがあるようです。価値の低い駒の順(歩、香、桂、銀、金、角、飛)に並べるのが普通の感覚だと思うんですけど(Bulnder.Converter)、そうでないソフトも結構あります。USIプロトコルの仕様の説明では駒の価値の高い順に並んでいて、ShogiGUIなどはこれに倣ってくるのだと思います。
また、Aperyや、やねうら王では駒番号を「歩、香、桂、銀、角、飛、金」の順番にしています。これは金だけが成れない駒なのでこの順番で扱えば、「成れる駒であるかどうか」という判定を「飛車の駒番号以下であるか」という判定で済ませることが出来るため、少し高速化できるからです。(本当に微々たるレベルの高速化ですが)
そんなわけでして、各々のソフトがすでに異なる状態のsfen文字列を出力しているわけですから、いまさらやねうら王 定跡フォーマット2016が「価値の低い駒の順(歩、香、桂、銀、金、角、飛)」であるようにしても仕方がないと思うわけです。
そこでまあ、やねうら王 定跡フォーマット2016のsfen文字列では、手駒は「歩、香、桂、銀、角、飛、金」の順番で出力してあるものとする、ということを仕様として追加することにさせていただきたいと思います。
→ 2016/7/15 24:00 追記 : sfen文字列は本来は一意に定まる件 にあるように手駒は「飛車、角、金、銀、桂、香、歩」の順番とします。
やねうら大定跡がshogi686でとりあえず使えるようになった。テキストデータで二分探索するという発想がなくて、面白そうだったので実装してみた。
— merom686 (@merom686) July 14, 2016
やねうら王 定跡フォーマット2016に対応したソフトが急増中!?
そう言えば、「(ソートされた)テキストファイルをバイナリサーチ出来る」というのは、いまどきは知らない(気づかない)人が多いのかも知れませんね。この技術自体は30年以上の昔のテキストエディタの実装にも使われていますが、現代においてはロストテクノロジーの類かも知れません。
使って当たり前過ぎるアルゴリズムは「必殺!バイナリサーチっ!」とか詠唱することなく使ってしまえるということのような。
メモリをケチるために適当な小さいバッファに読み込んで、最後のレコードを見て読み進めるかバッファの中をバイナリサーチして探すかのようなバイナリサーチもどきを私はよくやりますしw
これ確かUSIのドラフトには並び順(飛,角,金,銀,桂,香,歩)も規定されていたはず。元のサイトが無くなってるんで確認のしようがありませんが。
(`Д´)っ Wayback Machine
https://web.archive.org/web/20080131070731/http://www.glaurungchess.com/shogi/usi.html
> The pieces are always listed in the order rook, bishop, gold, silver, knight, lance, pawn;
ai5さんのおっしゃる通りのようです。将棋所の作者が将棋所で実装するときに削ったようですね。せっかく原案のほうはsfen文字列が一意に定まるようになっていたというのに…。いまのうちに思考エンジン側も出力はこれに倣うべきかも知れませんね。このあと禍根を残さないためにも…。
この件、やねうら王のほう修正しました。定跡の修正しました。(`・ω・´)b