第7版 V3.0 2024年 5月14日
異なる将棋プログラムの間で、棋譜や詰将棋・局面のデータ交換を可能とするために、棋譜ファイルの標準形式を定める。したがってこの形式は、人にとってわかりやすい、ファイルサイズが小さくなる、等を主な目的としていない。
各プログラムの棋譜ファイル形式を本仕様にする必要はない。各プログラムの棋譜を本形式に変換するプログラムを用意すれば、相互にデータの交換が可能となる。
本仕様は、既に定められている以下の規則を基本としている。
棋譜ファイルは処理を容易とするため、テキストファイルとする。
コメントと棋譜情報(対局者名等)に日本語を使用してもよい。
棋譜ファイルは、次のデータから成る。
(6)以外は、この順番でデータがなければならない。
(3) (5) (6) は、省略できる。
セパレータ("/"だけの行)をはさんで、(3)~(6) のデータを繰り返し、複数の棋譜や局面を記述することができる。
先頭行で、次のように、CSA形式であることを示し、文字コードを記述する。
'CSA encoding=UTF-8
文字コードは、"UTF-8" と "SHIFT_JIS" を指定できる。
この行がない場合、過去の棋譜との互換性のため、文字コードは SHIFT_JIS とし、改行コードは CR LF とする。
"V"で始まり、バージョンの数字を記述する。
現バージョンは、
V3.0
とする。
バージョンがない場合、1997年8月25日の仕様と判断する。
"N+"に続き +側(先手、下手)の対局者名を記述する。
"N-"に続き -側(後手、上手)の対局者名を記述する。
それぞれ1行とする。
省略可能とする。
例:
N+先手
N-後手
"$"で始め(キーワード)+":"(データ)の形式とする。
これらの棋譜情報は、省略可能とする。
$EVENT:(文字列)
$SITE:(文字列)
$START_TIME:YYYY/MM/DD HH:MM:SS
"YYYY"は、西暦の年4桁の数字とする。
次の"MM"は、月2桁の数字とする。
"DD"は、日2桁の数字とする。
"HH:MM:SS"は、24時間表現の時間(2桁)、分(2桁)、秒(2桁)とする。
"HH:MM:SS"は、省略可能とする。
日付と時刻の間のスペースは1桁とする。
例:
$START_TIME:2002/01/01 19:00:00
$START_TIME:2002/01/01
$END_TIME:YYYY/MM/DD HH:MM:SS
開始日時と同様に、対局終了日時を記述する。
$TIME:(初期持ち時間)+(秒読み)+(フイッシャー方式加算)
時間の単位は秒。
小数点で、ミリ秒単位で記述できるようにする。小数点以下は、最大3桁とする。
切れ負けの場合、秒読みを"0"とする。
フイッシャー方式加算が"0"でない場合、フィッシャー方式となる。
先手(下手)と後手(上手)の持ち時間が違う場合、先手(下手)の持ち時間を "$TIMET+:"、後手(上手)の持ち時間を "$TIMET-:"で記述する。
例:
$TIME:1500+0+0 持ち時間:1500秒(25分)、切れ負け
$TIME:1800+30+0 持ち時間:1800秒(30分)、秒読み:30秒
$TIME:0+30+0 初手から30秒の秒読み
$TIME:900+0+5 フイッシャー方式、初期持ち時間:900秒、加算:5秒
$TIME:10.5+0+5.5 フイッシャー方式、初期持ち時間:10.5秒、加算:5.5秒
先手と後手が違う場合の例:
$TIME+:450+0+5 先手:フイッシャー方式、初期持ち時間:450秒、加算:5秒
$TIME-:900+0+5 後手:フイッシャー方式、初期持ち時間:900秒、加算:5秒
$TIME_LIMIT:HH:MM+SS
持ち時間+秒読みとする。
持ち時間"HH:MM"は、時間(2桁以上の数字)、分(2桁の数字)とする。
秒読み"SS"は、秒単位の数字(2桁以上)とする。
切れ負けの場合、秒読みを"00"とする。
例:
$TIME_LIMIT:00:25+00 持ち時間:25分、切れ負け
$TIME_LIMIT:00:30+30 持ち時間:30分、秒読み:30秒
$TIME_LIMIT:00:00+30 初手から30秒
$OPENING:(文字列)
$MAX_MOVES:(手数)
対局のルールで決められた最大手数。
例:
$MAX_MOVES:320
$JISHOGI:(文字列)
24: 24点法
27: 27点法
※27点法は、先手が28点以上、後手が27点以上で、入玉宣言法で勝ちを宣言できる。
例:
$JISHOGI:27
$NOTE:(文字列)
"\n" を挟み、複数行を記録できる。"\\" は "\" に変換される。
例:
$NOTE:備考1行目\n2行目\\
"$"で始まる各種棋譜情報の表記順は任意でいい。
駒名:歩から玉まで:FU,KY,KE,GI,KI,KA,HI,OU
上の成駒:TO,NY,NK,NG, UM,RY
位置:1一を"11"、5一を"51"、9九を"99"というふうに、2桁の数字で表す。
駒台は"00"とする。
先手(下手)は"+"、後手(上手)は"-"を付ける。
"P"で始まる文字列。
平手初期配置は、"PI"とする。駒落ちは、"PI"に続き、落とす駒の位置と種類を必要なだけ記述する。
二枚落ちの例:
PI82HI22KA
1行の駒を以下のように示す。行番号に続き、先後の区別と駒の種類を記述する。
先後の区別が"+""-"以外のとき、駒がないとする。
1枡3文字で9枡分記述しないといけない。
例:
P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
P2 * -HI * * * * * -KA *
一つ一つの駒を示すときは、先後の区別に続き、位置と駒の種類を記述する。持駒に限り、駒の種類として"AL"が使用でき、残りの駒すべてを表す。駒台は"00"である。
玉は、駒台へはいかない。
例:
P-22KA
P+99KY89KE
P+00KIOOFU
P-00AL
"+"で+側(先手、下手)を、"-"で-側(後手、上手)の手番を示す。1行とする。
手番の指定は必要である。
初期状態はすべての駒が駒箱にあり、上記(2)(3)の指定は、駒を駒箱から盤上に移動する動作を表現する。したがって、以上の(1)から(3)の指定で位置が決まらないものは、駒箱にあるとする。また、盤面の指定が無いときは、盤上に何も無いとする。
上記(1)と(2)は同時に指定しない。
"P+00AL"、"P-00AL"は、最後に指定しなければならない。
手番は、盤面データの後に指定する。
1手の指し手を1行とし、次の行にその指し手で消費した時間を示す。
先後("+"、または"-")の後、移動前、移動後の位置、移動後の駒名、で表す。
例:
+3324NG ☗2四銀成
%で始まる。
%TORYO 投了。消費時間を記録できる。
%CHUDAN 中断
%SENNICHITE 千日手
%TIME_UP 手番側が時間切れで負け
%ILLEGAL_MOVE 手番側の反則負け、反則の内容はコメントや備考で記録する。
%+ILLEGAL_ACTION 先手(下手)の反則行為により、後手(上手)の勝ち
%-ILLEGAL_ACTION 後手(上手)の反則行為により、先手(下手)の勝ち
%JISHOGI 持将棋
%KACHI (入玉宣言法で)勝ちの宣言
%HIKIWAKE (入玉宣言法で)引き分けの宣言
%MAX_MOVES 最大手数に達した。 (V3.0 で追加)
%MATTA 待った V3.0 で削除
%TSUMI 詰み
%FUZUMI 不詰
%ERROR エラー
※文字列は、空白を含まない。
※%KACHI,%HIKIWAKE は、コンピュータ将棋選手権のルールに対応し、第3版で追加。
※%+ILLEGAL_ACTION,%-ILLEGAL_ACTIONは、手番側の勝ちを表現できる。
"T"に続き、直前の指し手で消費した時間を秒単位で記述する。
消費時間は、小数点を使い、ミリ秒単位を記述できる。小数点以下は、最大3桁。
※小数点を使うと、過去のプログラムが正しく読めなくなるので、必要な場合だけにする。
※ミリ秒単位の表現は、V3.0 で追加。
消費時間は省略可能とする。
例:
T15.123
"'*"に続き、プログラムが読むコメントを記述する。
指し手、または、開始局面の後に記述する。
コメントが複数行ある場合、"'*"を複数行記述する。
例:
'*コメント1行目
'*コメント2行目
"'** "に続き、評価値、読み筋、ノード数を記述可能とする。
評価値、読み筋、ノード数は、半角空白を挟み、記述する。
評価値は整数とし、先手有利をプラス、後手有利をマイナスとする。
※先手勝ちの評価値は 30000、後手勝ちの評価値は -30000 を推奨する。
"#"の後にノード数を記述する。
例:
'** 30 +7776FU -9394FU +7968GI #1234
読み筋の指し手の表記は、前述の「2.7 指し手と消費時間」に従う。
読み筋は、指し手を半角空白を挟んで続ける。
読み筋は、直前の指し手の後の手順を記録する。例えば、☗2六歩の指し手の後の読み筋には、☗2六歩を含めず、次の後手の指し手から始める。
例:
+2726FU,T15
'** 99 -8384FU +7776FU
読み筋の終局状況・特殊な指し手として、以下を記述可能とする。
"'"(アポストロフィー)で始まる行は、プログラムが読み飛ばすコメントとする。
文の途中からのコメントは、記述できない。
","(カンマ)を用いて、複数の行を1行にまとめることができる。
"csa"とする。unix のように大文字小文字の区別がある場合は小文字とする。
'CSA encoding=UTF-8
'----------棋譜ファイルの例 "example.csa"---------------
'バージョン
V3.0
'対局者名
N+先手
N-後手
'棋譜情報
'棋戦名
$EVENT:34th World Computer Shogi Championship
'対局場所
$SITE:INTERNET
'開始日時
$START_TIME:2024/05/05 15:05:40
'終了日時
$END_TIME:2024/05/05 15:31:22
'持ち時間:フイッシャー方式、初期持ち時間:900秒、加算:5秒
$TIME:900+0+5
'戦型:矢倉
$OPENING:YAGURA
'最大手数:320
$MAX_MOVES:320
'持将棋ルールは、27点法
$JISHOGI:27
'備考
$NOTE:備考1行目\n2行目
'平手の初期局面
P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
P2 * -HI * * * * * -KA *
P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
P4 * * * * * * * * *
P5 * * * * * * * * *
P6 * * * * * * * * *
P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
P8 * +KA * * * * * +HI *
P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
'先手番
+
'指し手と消費時間
+2726FU,T0
'評価値、読み筋、ノード数
'** 30 -8384FU +2625FU -8485FU +6978KI -4132KI +3938GI -7172GI #1234
-3334FU
'ミリ秒単位の消費時間
T6.123
'*プログラムが読むコメント1行目
'*プログラムが読むコメント2行目
%CHUDAN
'-------------------------------------------------