島を出るまでの工程数レポートの読み方
数値は stats/escape_reach.yaml にあります。
tests/diagnostics/escapeReachStatsReport.test.ts が、定義(src/assets/world-codex/*.yaml)だけから
計算したものです。工程(interactions・recipes・range系イベントの周期)や土地の発見物を変更したら
再生成します。
npm run stats:escape
この文書は手書きで、再生成しても書き換わりません。 持つのは読み方——何を測ったか、どこに線を 引いたか、何を数えていないか——だけです。数値そのものは1行も書きません(書けば、再生成した YAMLとずれます)。
YAMLの節
unit は、そのレコードの測定値(hops・max_hops)の単位です。件数
(departure_locations・needs・goals)は単位を持ちません。
| 節 | 中身 |
|---|---|
meta |
出発集合の土地の数、要るものの数、そのうち目標そのものの数、最も遠いものの工程数 |
departure |
出発集合=島にそのまま在るもの(探索できる島の土地) |
needs |
要るもの1つずつの工程数と、そこへ最も少ない工程で届いた工程・その入力 |
unreached |
届かなかった要るものの切れ目(鎖が閉じていれば空でもよい) |
この表とYAMLが食い違うと npm test が赤くなります。 表に挙げた節がYAMLに在って空でないことと、
表に無い節がYAMLに無いことの両方を、生成元のテストが見ます。
計測方法
数え方の線は src/analysis/escapeReach.ts の冒頭が持ちます。要点だけ挙げると、
- 測るのは「島を出るのに要るものが、島の産物から何工程先にあるか」。工程数は工程の本数で、 0工程は島の土地そのもの。
- 出発集合は島の土地そのもので、探索も他と同じ1つの工程として回す。海区は入れないので、 海の産物は船が出来るまで手に入らない。
- 待って起こる作り替えも工程。炉が焼く肉・罠が渡す獲物のように、操作ではなく値がrangeの端へ 届いて生まれる物も1つの工程として数える。押し手は入力に並ぶので、焼くには炉が要る。
- 島ごとの土地の配りは数えない。 定義の上で鎖が閉じるかだけを見る(その土地が生成された島に
在るかは
IslandEscapeReachStats.mdが同じ鎖について島ごとに数える)。 - 個数は数えない。 同じ工程は何度でも繰り返せる。道具(
consume: false)も、減らないだけで 要ることに変わりはなく、材料と同じ1つの入力として数える。
要るもの
needs は、目標そのもの——boat・sail・fishing_tool を名乗る型(ContentSkeleton.md 3節の
系統11)——と、そこへ推移的に要求される型。目標そのものの行だけが goal_tag を持ちます。並びは
工程数の昇順で、同じ工程数なら宣言順。
step_kind・step・owner は、その型へ最も少ない工程で届いた工程(interaction か recipe)。
hops が0の型(出発集合)では空です。inputs の tag は、タグで指した入力
({tag: cutting_tool})ならそのタグ名で、object はそれを満たす型——タグで指した入力では、
島から最も少ない工程で届く型が代表に1つ選ばれます。
切れ目
unreached は、届かなかった型を生みうる工程と、そのうち島から届かない入力(missing)。
この節が空であることが「鎖が閉じている」で、空でない行はどこで切れたかを指します。
このレポートは判定を出さない。 鎖が閉じているかを赤/緑で判定するのは
tests/integration/escapeReach.test.ts で、ここが持つのは数字だけです。工程数が長すぎるかどうかは、
この数字を見てから決めます。