手順を含まない SFEN(局面のみの SFEN)を、CSA 形式の棋譜から探し出し、 局面に至るまでの手順を含む形式(手順を含む SFEN または SETBUOY)へ変換するツールである。
- 入力1: 手順を含まない SFEN(1 行 1 局面)
例:
l1s1k2nl/1r1g2g2/2npppsp1/ppp3p1p/9/P1P2P1PP/1PSPPSP2/2G4R1/LN2KG1NL w Bb 24 - 入力2: CSA 形式の棋譜(複数ファイル / ディレクトリ再帰)
- 出力: 局面 + 手順の情報
- 手順を含む SFEN:
startpos moves 2g2f 8c8d 2f2e ... - SETBUOY 用の手順:
+2726FU-8384FU+2625FU...(CSA 手を連結)
- 手順を含む SFEN:
手順を含まない各 SFEN の末尾の手数 N を手がかりに、CSA 棋譜を初手から再生して N 手目の局面が一致する棋譜を探し、そこまでの手順を出力する。 (実装は「手順を含まない SFEN を全て HashMap に格納し、棋譜側を一度だけ走査して引く」方式)
- Rust 1.96 / Edition 2024(
rust-toolchain.tomlで固定) - SH11235/rshogi の
rshogi-csacrate (CSA パース・CSA↔USI 変換・SFEN 出力に使用)
cargo build --release# ディレクトリ再帰でCSA棋譜を探し、手順を含む SFEN で出力(既定)
sfen2seq --sfen positions.txt --csa-dir csa-logs
# 標準入力からSFEN、CSAファイルを個別指定、SETBUOY 用の手順で出力
cat positions.txt | sfen2seq --csa a.csa --csa b.csa --format setbuoy| オプション | 説明 |
|---|---|
--sfen <FILE> |
検索対象の手順を含まない SFEN ファイル(省略時は標準入力) |
--csa <FILE>... |
CSA 棋譜ファイル(複数可) |
--csa-dir <DIR>... |
CSA 棋譜を再帰探索するディレクトリ(*.csa を収集) |
--format <sequence|setbuoy> |
出力形式(既定: sequence) |
--no-match-marker <STR> |
不一致行の行頭マーカー(既定: # NO_MATCH) |
--quiet |
進捗・サマリ(標準エラー出力)を抑制 |
- 標準出力に 入力 SFEN 1 行につき 1 行 を、入力順で出力する。
- 一致した場合: 変換結果(手順を含む SFEN / SETBUOY 行)
- 一致しなかった場合:
# NO_MATCH <元のSFEN>(--no-match-markerで変更可)
- 進捗・一致サマリは標準エラー出力へ(
--quietで抑制)。
- 空行・
#で始まる行は無視する。 - 行頭の
position/sfen接頭辞は自動で除去する。 - 末尾の手数を省略した SFEN も受け付ける。その場合は手数を問わず (盤面・手番・手駒のみで)一致する最初の局面を採用する。
- 手順を含まない SFEN: 局面のみで、そこに至る手順を含まない。1 行 1 局面。
- 手順を含む SFEN:
startpos moves ...形式。局面 + 手順。拡張子*.sfen。 本ツールでは行頭のpositionを含めず出力する。 - SETBUOY 用の手順: shogi-server の buoy 機能で
用いる、CSA 手を連結した手順(例:
+7776FU-3334FU...)。 本ツールは%%SETBUOY <game_name> ...のコマンド部や末尾の対局回数は付けず、手順のみを出力する。