# PCN — Portable Curling Notation 仕様 v1.0 **版 1.0 | 最終更新 2026-08-23 | 状態: 草案(参照実装と同期)** カーリングの試合を **人が読み書きでき、機械で正確に処理でき、物理シミュレーションで再現できる** テキスト形式で記録するための標準記譜法です。チェスの PGN、チェッカーの PDN と同じ命名系列に属します。 競技規則・統計記号は World Curling / CURLIT の公開資料に準拠します(出典は §11)。本仕様は World Curling・CURLIT とは関係のない非公式の文書です。 - 拡張子: `.pcn` 文字コード: UTF-8 改行: LF(CRLF も受理) - MIME: `text/x-pcn` - 参照実装: [`js/pcn.js`](../js/pcn.js)(DOM 非依存、Node / ブラウザ共通)。変換 CLI: `node tools/pcn.mjs` ## 1. 設計方針 1. **段階的な詳しさ(4層)** — 手元にある情報の深さに応じて、同じファイルに必要な層だけ書けます。 | 層 | 内容 | 実在する情報源の例 | |---|---|---| | ① ラインスコア | エンド別得点・LSFE(第1エンドのハンマー)・LSD | WCF 結果データベース、各国協会の結果ページ | | ② 記述 | 投者・ショット種別(Task)・回転(Handle)・0〜4評価(Points) | WCF/CURLIT の Shot by Shot(PDF・Game Center) | | ③ 配置 | 各ショット後の全ストーン座標 | CURLIT PDF の配置図(画像)から抽出、コーチ用アプリ | | ④ 運動量 | リリース時の位置・速度・回転 | シミュレーター(CurlFlux、Digital Curling)、計測装置 | ④ があれば決定論的な物理エンジンで**完全再生**、③ なら配置に**フィット**した投球、② なら記述に**整合する**投球を生成して再現します。 **処理系をまたげるのは③まで**です。④の `v=` は物理モデルに依存するので、同じ初速でも別のエンジンでは別の場所に止まります。そのため `v=` は必ず `Engine` タグと対で書き、**エンジンが違う再生側は `v=` を無視して③(無ければ②)から組み直します**(§10)。つまり ③=どの実装でも同じ盤面をたどれる共通言語、④=同じエンジンでの完全再現とビット単位の検証用、という役割分担です。`Ice` タグ(ホッグ間タイム・カール量)を併記しておくと、別のエンジンでも近い挙動に校正できます。 2. **WCF の実務に一致させる** — ショット種別(Task)と評価(Points)は World Curling / CURLIT の統計員資料 *Curling Statistics: How to Score* の定義と1文字コードをそのまま採用します。回転(Handle)だけは、同資料が In-turn / Out-turn(`I` / `O`)と書くところを、曲がる向きが一目で分かる `>` / `<` に置き換えています(対応は §4.2)。 3. **行指向・追記可能** — 1ショット=1行。`grep` や表計算ソフトで扱え、差分が読めます。先頭から順に読める形なので、投げるたびに1行足していけばライブ記録になります(`Score` 行が無いエンドは進行中)。 4. **既存の記録を置き換えるのではなく、内包する** — 公開されている記録(ラインスコア、WCF/CURLIT の Shot by Shot、コーチ用アプリの CSV、シミュレータのログ)は、そのまま①〜④のどれかに収まります。カーリングには PGN(チェス)や PDN(ドラフツ)にあたる公開の記譜形式が見当たらないため、既存資料の受け皿になることを優先しています。 5. **暗黙値は導出可能なものだけ** — 投球順(先攻・後攻)や投者の位置はルールから決まるので省略でき、例外(スキップがリードの石を投げる等)だけ明示します。 ## 2. 全体構造 ``` [PCN "1.0"] [Event "LGT World Men's Curling Championship 2026"] [Site "Ogden, UT, USA"] [Date "2026.04.02"] [Stage "Round Robin Session 18"] [Sheet "A"] [Red "JPN - Japan"] [Yellow "POL - Poland"] [RedPlayers "KOIZUMI S; USUI S; YAMAGUCHI T; YANAGISAWA R"] [YellowPlayers "LOBAZA B; CIEMINSKI M; DOMIN K; STYCH K"] [Ends "10"] [LSFE "Red"] [Result "5-0"] [Termination "Concede"] End 1 hammer=R 1 Y F>4 2 R D>4 3 Y D>2 4 R D<4 5 Y D<2 6 R T<3 7 Y S<2 8 R H>3 9 Y H>4 10 R T<2 11 Y D<3 12 R H<4 13 Y P>1 14 R H>3 15 Y S<2 16 R D<4 Score 3-0 End 2 hammer=Y 1 R F>4 ... Score 2-0 ``` ファイルは **ヘッダー(タグ)** と **本文(エンドの並び)** からなります。空行は自由、`;` から行末まではコメントです。 ## 3. ヘッダー(タグ) `[Key "Value"]` を1行に1つ。値の中の `"` は `\"`、`\` は `\\` と書きます。順序は任意ですが、`PCN` を先頭に置くことを推奨します。未知のタグは保持して無視します。 | タグ | 必須 | 意味 | |---|---|---| | `PCN` | ○ | 仕様バージョン。`"1.0"` | | `Red` / `Yellow` | ○ | チーム名。ストーンの色で識別する(WCF 方式)。色が違う場合も名目上 Red/Yellow を使い、`RedColor` 等で見た目を指定 | | `Event` | | 大会名 | | `Site` | | 開催地(都市, 国) | | `Venue` | | 会場名。**互換のため受理**するタグで、参照実装は読み込み時に `Site` へ結合し(`"都市, 国 / 会場名"`)、書き出しは `Site` のみ。新規に書くなら `Site` に含める | | `Date` | | `YYYY.MM.DD`(不明部分は `??`) | | `Time` | | 開始時刻 `HH:MM`。**会場ローカル時刻**(WCF の記録がローカル)。タイムゾーンは `Site` の会場から判断する。UTC で持ちたい場合のみ `TZ`(例 `"+09:00"`)を併記してよい | | `Stage` | | ラウンド/セッション(例: `"Round Robin Session 18"`, `"Final"`, `"準決勝"`) | | `Sheet` | | シート名 | | `RedPlayers` / `YellowPlayers` | | 投球順に `;` 区切り(リード; セカンド; サード; フォース)。スキップが4番目でない場合は名前の後ろに `(S)` を付ける。ミックスダブルスは2名 | | `RedShort` / `YellowShort` | | 略称(`JPN` など 3〜4文字) | | `RedColor` / `YellowColor` | | 表示色(`#rrggbb`) | | `Ends` | | 規定エンド数。WCF 選手権は `10`、ミックスダブルスは `8`(R17(c))。省略時は参照実装の既定 `10` になるため、8エンド戦などは明示すること | | `Stones` | | 1エンドの1チーム投球数(既定 `8`。ミックスダブルスは `5`) | | `Format` | | `Team`(既定)/ `MixedDoubles` / `Wheelchair`。ミックスダブルスは `Stones` 既定 5、投球順 1-2-2-2-1(R17(d))、各エンドの `Setup` でプレポジション(A・B)を書く。`Wheelchair` は進行が4人制と同じ(違いはスイープ無し)なので、参照実装は4人制として読む。ルールの既定値には影響する(§6.1) | | `FGZ` | | 石を守るルールが効く投数 `0` / `3` / `4` / `5`。省略時は `Date` と `Format` から既定(§6.1)。ミックスダブルスの `3` は4人制の FGZ とは別のルール(§6.1) | | `NoTick` | | `true` / `false`。センターライン上の相手 FGZ ストーンをラインから外せないルール(2022-23〜)。**ミックスダブルスと車いすは対象外**(R7)。省略時は `Date` と `Format` から既定 | | `ThinkingTime` | | 持ち時間(例 `"38:00"`、ミックスダブルス `"22:00"`) | | `SheetWidth` | | シート幅 m(既定 `4.75`。旧規格 `4.28`) | | `Ice` | | 氷の条件 `"hh=13.8 curl=1.2"`。`hh` = ティーに止まるドローのホッグ間タイム(秒)、`curl` = そのドローのカール量(m)。再生側はこれに合うよう摩擦・カールを校正する。エンジン固有の倍率 `friction=` `curlx=` を併記してもよい | | `LSFE` | | 第1エンドにハンマー(最終投)を持つチーム `Red` / `Yellow` | | `LSD` | | ラストストーンドロー `"Red 286.3; Yellow 199.6"`(cm。ハウス外は 199.6) | | `Result` | | 最終得点 `"Red-Yellow"`(例 `"5-0"`)。進行中・不明は `"*"` | | `Termination` | | `Normal` / `Concede`(コンシード)/ `Time` / `Forfeit` | | `Engine` | | ④層の運動量を再生する物理エンジン識別子(例 `"curlflux/1"`)。運動量を書くときは必須 | | `Source` | | 出典(URL など) | | `Annotator` | | 記録者 | ## 4. 本文 ### 4.1 エンド ``` End [hammer=R|Y] [key=value ...] ...ショット行... Score - ``` - `End` の `n` は 1 から。規定エンド後の延長は続き番号(11, 12 …)で書き、`EE` 表示は再生側で行います。 - `hammer=` は省略可。省略時は前エンドの結果(得点した側の相手が次のハンマー、ブランクなら維持)と `LSFE` から導出します。矛盾する場合は明示値を優先し、警告を出します。 - そのほかの属性: `powerplay=R|Y`(ミックスダブルスのパワープレイを使った側)、`clockR=MM:SS` / `clockY=MM:SS`(エンド終了時の持ち時間残り)。 - `Score` はそのエンドの得点。コンシード等で投げ切らなかったエンドは `Score X`(両チーム未投球)または `Score 2-X` のように `X` で示します。`Score` 行を省略すると未確定(進行中)です。 ### 4.2 ショット行 ``` <番号> [R|Y] <ショット> [key=value ...] [; コメント] ``` | 要素 | 形 | 意味 | |---|---|---| | 番号 | `1`〜`16`(ミックスダブルス `1`〜`10`) | エンド内の通し番号。1 から昇順。 | | 側 | `R` / `Y` | 省略時は **ハンマーでない側が1投目**、以後交互。順序が乱れた記録(投球順違反など)のときだけ書く | | ショット | `<注釈>` | 下記。`-` と `X` は Task 単独で完結 | | `p=` | `1`〜`4` | 投者。`Players` タグの何番目か(1始まり)。省略時は規定順(2投ずつ)。 | | `t=` | 秒 | ホッグ間タイム(スプリット)。例 `t=12.7` | | `i=` | 秒 | インターバルタイム(バックライン→ホッグ) | | `clock=` | `MM:SS` | ショット後の持ち時間残り | | `v=` | `x,y,vx,vy,w` | ④ 運動量(§5.2) | | `est` | フラグ | `v=` が計測値ではなく、②③から推定で生成したもの | #### Task(ショット種別)— WCF/CURLIT 統計員マニュアルの記号 | 記号 | 英名 | 日本語 | 分類 | |---|---|---|---| | `D` | Draw | ドロー | slow | | `F` | Front | フロント(ハウス手前に置く。センター/コーナーガードを含む) | slow | | `G` | Guard | ガード(特定の石を守る) | slow | | `R` | Raise / Tap Back | レイズ/タップ | slow | | `W` | Wick / Split / Soft-peeling | ウィック/スプリット/ティック | slow | | `Z` | Freeze | フリーズ | slow | | `T` | Take-out | テイクアウト | fast | | `H` | Hit and Roll | ヒットアンドロール | fast | | `C` | Clearing | クリアリング(ピール) | fast | | `S` | Double Take-out | ダブルテイクアウト | fast | | `P` | Promotion Take-out | プロモーションテイクアウト(ランバック) | fast | | `-` | Through | 意図的なスルー(Handle・Points なし) | — | | `X` | Not considered | 評価対象外(バーンドストーン等。Points なし) | — | #### Handle(回転) | 記号 | 意味 | |---|---| | `>` | 時計回り(上から見て)。右利きのインターン。石は**右へ**曲がる | | `<` | 反時計回り。右利きのアウトターン。石は**左へ**曲がる | 利き手は考慮せず、石の回転方向だけを記録します(WCF と同じ)。不明なら省略します。 #### Points(評価) `0`〜`4`(WCF の 0/25/50/75/100% に対応)。不明なら省略。評価の付け方は World Curling / CURLIT の統計員ガイドラインに従います(例: Take-out 4 = 相手を出して自石が残る、3 = 残ったが転がった、2 = 両方アウト、0 = 相手が残った)。 WCF の統計では、ホッグライン違反・FGZ 違反などは「Player's Fault」として Task と別に記録します。PCN では**意図した Task をそのまま書き、`x=` フィールドで理由を示します**(§4.6)。 #### 注釈 `!`(好手)`!!`(妙手)`?`(疑問手)`??`(悪手)`!?` `?!` を Points の後ろに付けられます。評価とは独立した主観的注釈です。 ### 4.3 配置行(③層) ショット行・`Setup` 行の直後に、`@` で始まる行でそのショット**後**の全ストーン座標を書きます。 ``` 3 Y D>2 @ Y0.05,3.42 R-0.21,0.88 Y0.33,-0.12 ``` - 項目は `,`(空白で区切る)。座標は §5.1。順序は任意。 - プレー中の石だけを書きます(除去された石は書かない)。 - 石が無ければ `@` だけの行。 - 末尾に `*` を付けた石は、その局面で**投げた石(投球石)が場内に残った最終位置**を表します(World Curling の配置図では太黒縁で描かれる)。1局面に1つまで。フィット(③→②)でどの石が投球石か曖昧なとき、この印があれば投球石を場外に出さずその位置に残す解を優先します。投球石が場外に出た局面には印を付けません。例: `@ R0.10,0.30* Y0.08,2.69` ### 4.4 配置からの開始(`Setup`) 任意の配置から始めるとき(ミックスダブルスのプレポジション、練習課題、戦術研究)は `End` の直後に書きます。 ``` End 1 hammer=Y Setup @ R0.00,3.50 Y0.00,0.30 1 R D<4 ``` ### 4.5 エンジン拡張行 - `Strike v=x,y,vx,vy,w` — 盤上の `k` 番目(`@` の並び順、1始まり)の石に速度を与える分析操作。実戦のショットではありません。対応しない実装は無視します。 - 将来の拡張は先頭語で識別します。未知の先頭語の行は保持して無視してください。 ### 4.6 イレギュラー・エッジケースの書き方 原則は2つ。**結果は `@` 配置で表す**(どんな盤面にもなれる)/**理由は `; コメント` か `x=` フィールドで表す**。これで反則・特殊処置・不規則な進行をすべて書けます。未知の `key=value` とコメントは往復で保持されます(実装は知らないキーを捨てない)。 **反則(ルール違反)** — `x=<コード>` を付け、`@` に**処置後の配置**を書く: | コード | 意味 | 処置(`@` に反映) | |---|---|---| | `x=fgz` | 石を守るルールの違反(4人制は6投目の投球前に相手の FGZ 石を場外、ミックスダブルスは4投目の投球前に自他いずれかの石を場外)| 動かした石を戻し、投球石を除く。※ `FGZ` ルールが効くなら再生側が自動判定・復元するので `@` を省いても復元される | | `x=notick` | ノーティック違反(センターライン上の相手 FGZ 石をラインから外す。ミックスダブルス・車いすには無い) | 規則上は違反されなかった側の選択(戻す/そのまま)。`@` に選んだ結果を書く | | `x=hog` | ホッグライン違反(リリース遅れ) | 投球石を除く(`@` に投球石を書かない) | | `x=burn` | バーンストーン(進行中に触れた) | 相手の選択(そのまま/戻す/除く)を `@` に反映。詳細は `; コメント` | | `x=reposition` | 審判による石の再配置 | 再配置後の位置を `@` に書く | | `x=wrong` | 誤ったストーン/順番の投球 | 処置結果を `@` に。詳細はコメント | 例: `5 R T<0 x=fgz ; 相手センターガードを場外 → 復元` の後に処置後の `@`。 **試合レベルの終了・不戦**(`Termination` タグ): - `Concede`(コンシード/投了): 投げ切らなかったエンドは `Score X`(両者未投)または `Score 2-X` 等の `X`。`Result` は決着スコア。 - `Time`(時間切れ負け)、`Forfeit`(不戦・失格): 同様に `Termination` と `Result`/`Score X`。 - ブランクエンド: `Score 0-0`(ハンマー維持)。 - 延長エンド: 規定エンドを超える `End n` をそのまま続ける(`Ends` は規定数、実際は超えてよい)。 **進行中・未確定**: `Score` 行を省略するとそのエンドは未確定(ライブ記録の途中)。 **その他**: 計測(メジャー)は結果が `@`/`Score` に出るので追加不要(必要ならコメント)。タイムアウトは `; time-out`。パワープレイは `End … powerplay=R|Y`。 ## 5. 座標と運動量 ### 5.1 座標系 - 単位: **メートル**。小数 2 桁(1cm)を標準、必要なら 4 桁まで。 - 原点: **プレー中のハウスのティー(ボタン中心)**。 - `+x`: 投球者から見て右。`+y`: 投球者の側(ハックの方向)。ガードは `y > 0`、ハウスの奥(バックライン側)は `y < 0`。 - 参考寸法(WCF): 12ft 円半径 1.829、8ft 1.219、4ft 0.610、ボタン 0.152、ホッグライン `y = 6.401`、バックライン `y = −1.829`、シート幅 4.75(`|x| ≤ 2.375`)。石の半径 0.1455。 - Digital Curling(原点ハック、`y` はハウス方向)からの変換: `x_pcn = x_dc`, `y_pcn = 38.405 − y_dc`(ハック〜ティー間 38.405 m)。 ### 5.2 運動量 `v=x,y,vx,vy,w` | 要素 | 単位 | 意味 | |---|---|---| | `x,y` | m | 記録開始時点(リリース)の石の中心位置。§5.1 の座標系 | | `vx,vy` | m/s | 速度ベクトル | | `w` | rad/s | 角速度。上から見て**反時計回りが正**(`>` の石は負) | `v=` のあるショットは `[Engine ...]` で指定した決定論的エンジンで再生すると、③層を省略しても同じ配置になります。エンジンが異なる場合、再生側は `v=` を無視して ③ または ② から再構成すべきです。 ## 6. 導出規則 1. **投球側**: `End` の `hammer` から、1投目はハンマーでない側。以降交互。`R`/`Y` を明示した行はそれに従い、次の省略行は「投球数が少ない側」が投げます。 2. **ハンマー**: `LSFE` → 各 `Score` で得点した側の相手。ブランク(0-0)は維持。`X` を含むエンドでは変化なし。 3. **投者**: `Stones` を人数で割った投数ずつ順番に(4人制なら 2 投ずつ)。`p=` があれば優先。 4. **評価%**: `Points × 25`。チーム/選手の成功率は `Σpoints ÷ (4 × 対象ショット数)`。`-` と `X` は分母に含めない。 5. **最終得点**: `Score` の合計。`Result` タグと食い違えば `Result` を優先して警告。 ### 6.1 年代・形式ごとの既定ルール `FGZ` / `NoTick` タグが無いとき、`Date` と `Format` から当時の規則を当てます。基準は **World Curling(国際大会)の適用時期**です。国内大会・クラブで異なる場合はタグで明示してください。 **4人制・車いす**(`Format` が `Team` / `Wheelchair`) | 期間 | `FGZ` | `NoTick` | 根拠 | |---|---|---|---| | 〜1993年6月 | 0 | false | FGZ 以前(原型は 1990-91 の Moncton Rule、1992年五輪で試用) | | 1993年7月〜 | 4 | false | WCF が 1993-94 シーズンから国際公式戦に4ロック FGZ を導入 | | 2018年7月〜 | 5 | false | 2017年9月の WCF 総会で決定、2018-19 シーズンから5ロック | | 2022年7月〜 | 5 | true | 2022-23 シーズンからノーティックを適用(車いすは対象外) | カナダ国内選手権だけは 1993-94〜2001-02 が **3ロック**でした(2002-03 に4ロックへ統一)。国際基準とずれるので年代の既定にはせず、`FGZ "3"` と明示して使ってください。 **ミックスダブルス**(`Format` が `MixedDoubles`)は年代によらず次の値です。 | `FGZ` | `NoTick` | 根拠 | |---|---|---| | 3 | false | R17(e)(保護は最初の3投)/R7(ノーティックの対象外) | #### 守る対象は形式で違う(重要) 同じ `FGZ` タグでも、守る範囲が4人制とミックスダブルスで異なります。 - **4人制・車いす(R6)**: 6投目の投球前に、**相手**の石を **FGZ(プレー側のティーラインとホッグラインの間、ハウスを除く)から場外**へ出したら違反。自分の石は出してよく、ハウス内の石も対象外。処置は**必須**で、投球石を除き、動いた石を元へ戻す。 - **ミックスダブルス(R17(e))**: 4投目の投球前に、**自分・相手を問わず、すでに投げた石と置き石のいずれか**を**場外**へ出したら違反。位置は FGZ に限りません。処置は4人制と同じ。 - **ノーティック(R7)**: 6投目の投球前に、FGZ 内でセンターラインに接している**相手**の石を、ラインから外す/FGZ の外へ動かしたら違反。処置は**違反されなかった側の選択**(①投球石を除いて戻す ②そのまま)。場外まで出した場合は R6(b) の処置になります。**ミックスダブルスと車いすには適用されません。** PCN には投球をそのまま書き、結果は再生側が判定します。再生側は違反時に①(戻す)を選ぶ実装で構いません(参照実装はそうしています)。記録済みの試合を再生するときは、判定を当てずに記録の `@` 配置をそのまま使うことを推奨します(当時の判定は記録に反映済みで、推定物理で判定し直すと誤検出になるため)。違反が記録に残っている場合は `x=fgz` / `x=notick`(§4.6)で明示できます。 ## 7. JSON 表現(PCN-JSON) プログラム間の受け渡し用に、テキストと 1 対 1 に対応する JSON を定義します。 ```json { "pcn": "1.0", "tags": { "Event": "...", "Red": "...", "Yellow": "..." }, "ends": [ { "no": 1, "hammer": "R", "setup": null, "shots": [ { "no": 1, "side": "Y", "task": "F", "handle": ">", "points": 4, "player": 1, "split": null, "board": [["Y", 0.05, 3.42]], "v": null, "est": false, "nag": "", "comment": "" } ], "score": { "red": 3, "yellow": 0 } } ] } ``` - `handle` は `">"` / `"<"` / `null`、`points` は整数または `null`、`task` は `"-"` `"X"` を含む文字列。 - エンドには `powerplay`(`"R"`/`"Y"`/`null`)、`clockR`/`clockY`(文字列)が入ることがある。`Strike` 行は `shots` 配列内に `{ "strike": k, "v": [...] }` として現れる。 - `board` は `[side, x, y]` の配列、`v` は `[x, y, vx, vy, w]`。 - `score` の `X` は `null`(例 `{ "red": 2, "yellow": null }`)。 ## 8. 文法(EBNF) ``` file = { line } ; line = tag | end | score | setup | shot | board | strike | comment | empty ; tag = "[" key WS string "]" ; end = "End" WS int { WS kv } ; score = "Score" WS ( "X" | num "-" num ) ; (* num は int または "X" *) setup = "Setup" ; shot = int [ WS side ] WS shotspec { WS ( kv | "est" ) } ; board = "@" { WS stone } ; stone = side coord "," coord [ "*" ] ; (* 末尾 * = 場内に残った投球石 *) strike = "Strike" WS int WS kv ; side = "R" | "Y" ; shotspec = task [ handle ] [ points ] { nag } | "-" | "X" ; task = "D"|"F"|"G"|"R"|"W"|"Z"|"T"|"H"|"C"|"S"|"P" ; handle = ">" | "<" ; points = "0"|"1"|"2"|"3"|"4" ; nag = "!" | "?" ; kv = key "=" value ; (* value に空白は含まない *) comment = ";" { any } ; ``` 行末の `; コメント` はどの行にも付けられます。大文字小文字は区別します。 ## 9. 例 ### 9.1 ②層のみ(WCF の Shot by Shot から転記) [samples/wmcc2026-rr18-jpn-pol.pcn](../samples/wmcc2026-rr18-jpn-pol.pcn) を参照(§2 の例)。 ### 9.2 ③層付き(配置図から座標を起こした場合) ``` End 3 hammer=R 1 Y F>4 @ Y-0.02,3.61 2 R D>4 @ Y-0.02,3.61 R0.08,0.41 3 Y T<4 @ Y-0.02,3.61 Y0.31,-0.55 ``` ### 9.3 ④層付き(CurlFlux で記録した試合) ``` [Engine "curlflux/1"] ... 1 Y F>4 t=13.1 v=0.0000,30.8000,0.0124,-2.3315,-0.8000 @ Y-0.02,3.61 ``` ## 10. 再生ガイドライン(実装者向け) 1. `v=` があり `Engine` が**自分と一致** → そのまま物理再生(完全再現)。 2. `v=` があるが `Engine` が**違う** → `v=` は使わない。物理モデルが違えば同じ初速でも止まる場所が変わるため、3. と同じく `@` からフィットし直す(`Ice` タグがあれば自分のエンジンをそれに校正してから解く)。 3. `@` がある → 前後の配置差分から投球を**フィット**(ドローなら停止位置、ヒットなら接触結果)。得られた `v=` は `est` 付きで保存してよい。 4. ②のみ → Task・Handle・Points と盤面から整合する投球を生成。Points が低いほど狙いから外す。`-` は何にも当てない通過、`X` は盤面を変えない。 5. 生成・フィットした投球は UI 上で「推定」と分かるように表示する(CurlFlux では `≈`)。 6. **記録済みの試合を再生するときは、ルール違反の判定を当てない**。当時の判定は記録に反映済みで、推定物理で判定し直すと誤検出になる(§6.1)。 7. ライブ記録を読むときは、末尾のエンドに `Score` が無い=進行中として扱い、行が追記されうる前提で読む。 ## 11. 出典 本仕様が準拠した一次資料です。本仕様は World Curling・CURLIT とは関係のない非公式の文書で、規則の解釈に相違がある場合は原典が優先します。 | 内容 | 資料 | |---|---| | 競技規則(FGZ = R6、ノーティック = R7、ミックスダブルス = R17、車いす = R14) | *The Rules of Curling and Rules of Competition*, World Curling, July 2024([一覧](https://worldcurling.org/rules/) / [PDF](https://worldcurling.org/wp-content/uploads/2024/08/Rules-2024.pdf)) | | ショット種別(Task)・回転(Handle)・評価(Points)の定義 | *Curling Statistics: How to Score*, © World Curling and CURLIT Ltd., 2025([PDF](https://curlit.com/powerpoint/StatsTraining_2025_2026.pdf)) | | ②③層の元データ(Shot by Shot・配置図) | World Curling Live Scores(`livescores.worldcurling.org`)/ CURLIT Results Book(`curlit.com`) | | FGZ の成立と各国の導入時期 | Curling Canada「History of Curling」、World Curling の年次発表(2017年9月総会の5ロック決定、2022年のノーティック試行) | 規則の引用箇所(2024年7月版): - **R6(b)**「6投目の投球前に、投じた石が直接・間接に相手の石を FGZ から場外へ動かした場合、投じた石を除き、動いた石を戻す」 - **R7**「6投目の投球前に、FGZ 内でセンターラインに接している相手の石をライン外/FGZ 外へ動かした場合、違反されなかった側が『除いて戻す』か『そのまま』を選ぶ。**車いす・ミックスダブルスには適用しない**」 - **R17(e)**「4投目の投球前に、投じた石が直接・間接に、**すでに投げた石または置き石**を場外へ動かした場合、投じた石を除き、動いた石を戻す」 - **R17(c)(d)**「1試合8エンド、1エンド1チーム5投。第1投を投げた選手が最終投も投げ、もう一方が第2〜4投を投げる」 ## 12. 変更履歴 | 版 | 日付 | 内容 | |---|---|---| | 1.0 | 2026-08-23 | 年代既定を World Curling の適用時期に修正(1993-94 から4ロック。3ロックはカナダ国内のみ)。ミックスダブルスの守備範囲(R17(e))と、ノーティックがミックスダブルス・車いすに適用されないこと(R7)を明記。出典を追加。`Venue`・`Ends` の既定の扱いを実装に合わせて明記。旧記譜(CCN)からの移行に関する記述を削除 | | 1.0 | 2026-08 | 初版(4層構造・WCF の Task/Handle/Points・座標系・運動量・PCN-JSON・EBNF) | ## Quick reference (English) - Header tags `[Key "Value"]`: `PCN`, `Event`, `Site`, `Date` (YYYY.MM.DD), `Stage`, `Sheet`, `Red`, `Yellow`, `RedPlayers`/`YellowPlayers` (`;`-separated, throwing order), `Format` (Team|MixedDoubles|Wheelchair), `Ends`, `Stones`, `FGZ` (0|3|4|5, default by date **and format**), `NoTick` (true|false, default by date and format; never in mixed doubles or wheelchair), `ThinkingTime`, `SheetWidth` (m), `Ice` ("hh= curl="), `LSFE` (Red|Yellow), `LSD`, `Result` ("r-y"), `Termination`, `Engine`, `Source`. - Body: `End n [hammer=R|Y] [powerplay=R|Y] [clockR=MM:SS clockY=MM:SS]`, optional `Setup` + board line for pre-positioned stones, shot lines `n [R|Y] TASK[>|<][0-4][!?] [p=k] [t=sec] [v=x,y,vx,vy,w] [est] ; comment`, optional board line `@ Rx,y Yx,y ...` after a shot, `Score r-y` (X = unplayed). - Tasks follow the World Curling / CURLIT statisticians' codes: D Draw, F Front, G Guard, R Raise, W Wick/Split, Z Freeze, T Take-out, H Hit and Roll, C Clearing, S Double Take-out, P Promotion Take-out, `-` Through, `X` Not considered. Handle: `>` clockwise (in-turn), `<` counter-clockwise (out-turn). Points 0–4 = 0–100%. - Rules and statistics follow World Curling's *The Rules of Curling* (R6 FGZ, R7 no-tick, R17 mixed doubles) and the CURLIT statisticians' manual — see §11 for sources. This document is unofficial and not affiliated with World Curling or CURLIT. - Coordinates: metres, origin at the tee of the playing end, +x to the thrower's right, +y toward the thrower (guards positive). Angular velocity positive = counter-clockwise.