ローカル環境は独自に Littleman VM を再実装していない。
littleman.js
├─ littleman-runtime.js 公式 Go WASM API adapter
├─ judge.js 公式 Web runner 相当の judge
├─ wasm_exec.js Go WebAssembly runtime
└─ littleman.wasm 公式 VM(gitignore 対象)
したがって命令、pipe、tick、Display の実行意味論は公式 WASM そのもの。 今回修正したのは WASM の返却値を誤って扱っていた CLI/judge 部分である。
旧 littleman.js は簡単な halting program の実行には使えたが、公式 judge の
代替にはならなかった。
load()が返す JSON を捨て、structured load error を見落としていた。- load 失敗後の
{"type":"error","message":"no program loaded"}を繰り返し、 step limit まで実行していた。 - expected output と expected frames を常に空で渡していた。
outputSettledを見ず、正解出力後も halt まで実行していた。- round の入力解放、Display frame judge、公開 test 実行がなかった。
- default limit が 100,000 で、通常の grader の 5,000,000 と異なった。
- 1 tick ずつ
step()を呼び、大きな上限では不要に遅かった。
- 公式 Web runner と同じ I/O sanitizer と output 比較を使用。
- editor と同じく外側の空白 margin を crop し、snapshot/error 座標を元へ戻す。
load,step,stepN,backの全応答を lossless JSON parse。2^53超の int64 は decimal string として保持し、公式 Web runner の JavaScript number 丸めによる false pass/false fail を回避。type: errorを operation と source position 付きで例外化。- 通常実行は
haltedまで、judge 実行はhalted || outputSettledまで進める。 stepN(..., 5000, false)相当の batch 実行。done,pass,fail,load-error,crash,execution-error,timeoutを区別。/区切り round と段階的 input release。- round-grouped Display frames と WASM
frameJudge。 - problem detail JSON の
publicTestData一括実行。 - JSON output、全 tick verbose trace、WASM metadata 表示。
使い方は CLI README を参照。
- frame mismatch があれば fail。
- 通常 output が完全一致し、全 frame が一致すれば pass。
- 値が途中で違えば wrong output。
- expected より多ければ extra output。
- 異常 halt なら crash。
- 正常 halt したが不足なら missing output/frame。
- halt も settle もせず上限に達したら timeout。
正しい最後の output または frame を commit した時点で
outputSettled: true となり得る。そのため pass に H は不要。
公式 Editor は grid 編集、逆 step、 pipe/room/display 作図、公開 test、提出までを統合する。
| 操作 | shortcut |
|---|---|
| Run / Stop | Ctrl/⌘ + Enter |
| step 0 で pause | Shift + Ctrl/⌘ + Enter |
| Play/Pause, Next, Back | p, n, b |
| typeahead 方向 | Tab、逆は Shift+Tab |
| Select / Hand / Room / Pipe / Display | v, h, r, p, d |
| program-flow overlay | Alt/⌥ + F |
npm test の 21 test が公式 WASM に対して成功している。
- 単一 round の整数 I/O
- 外側 margin の crop と座標復元
- load error と
bad-op - correct、wrong、extra、pending output 比較
- 非 halt program の早期 pass
- round 1 完了後の round 2 input release
- 1×1 Display の frame match/mismatch
- CLI からの round-grouped frame JSON 読み込み
- tick timeout
- public problem JSON
- CLI の structured load error 終了
Ysplit の runner state2^53超の output と register の exact int64 保持
さらに公式 API から取得した Triangle の公開 6 test を、fixture の
Littleman program で全件 pass することを確認した。
- 実際の private tests と server-side resource limit はローカルでは再現不能。
- wall-clock、operation cap 等の内部 grader limit は problem API に公開されない。
- WASM が更新されれば挙動も変わる。
--download後は回帰 test を再実行する。 - Web UI の描画・local storage・undo stack は CLI の対象外。
- 公開前と思われる staging 機能
Yは runtime に存在するが、現 Language Reference には未掲載。正式告知前の提出での利用は推奨しない。