061 返事の遅い無線
実装・機能検証済み候補／人による面白さ・初見理解は確認待ち。

返事は届いた。でも、その「ここ」は一歩前の場所だった。
避難者へ文を送り、12刻までにHへ帰ってもらう短い会話判断です。
安全な道での帰還も成功。橋での早着だけを正解にしません。

起動
Windows: Python 3を用意し setup.bat、次に play.bat。両BATはASCII、パス引用済み。
macOS/Linux: bash setup.sh、bash play.sh。必要なのはPython 3.10以降とPyxel。
クラウド開発用: bash launch.sh。これは開発環境の絶対パスです。
Windows/macOS実機は未検証。Linuxクラウドでは実Pyxel描画と別途ネイティブ入力確認。
フォントはビットマップデータを同梱。実行時にPillow、システムフォントは不要です。

操作
上下: 文を選ぶ。Z: 送信、返事待ちなら1刻進める。
SPACE: 文を送らず1刻進める。X: 直前の1刻へ通信ごと戻す。終了後も可。
R: 同状況再開。P: 説明/停止。1/2/3: A/B/C。M: 表紙。ESC: 終了。
B: 質問の標本時刻だけ違う比較版へ切替して再開。
S: records/に公開ID、設定、意味入力、論理刻、全state、SHA-256を保存。
F12: media/に画面と独立したネイティブ入力記録を保存。
記録ファイルは真の初期位置を含むので、初見では読まないでください。
操作キーを離してから次の画面で押してください。押し続けによる連打はありません。

時計と情報
全ての道は1区間。相手は2/4/6...刻に歩きます。
送信tから1刻後に受信、2刻後に返事。返事待ちの間は別の送信不可。
順序: 時刻を進める→受信/指示変更→偶数刻の移動→返信→終了判定。
質問は受信直後・移動前の位置と目的地を標本にします。返信時の現在地ではありません。
画面の輪は既知候補を同じ時計で進めた位置。実位置は表示しません。
質問の返事に合わない候補だけ除きます。音・アニメーションの時間はルールに影響なし。
読んでいる時間は自由。Z/SPACEで確定した時だけ世界が進みます。
安全指示は橋JTを除く最短路、橋指示はT経由でHへ。同点は地点ID順。
閉橋は次の歩行時刻まで待機し、安全指示への切替はいつでも合法です。
Hに着いた相手は動きません。12刻ちょうどの到着も成功です。

状況bank（任意seed生成ではありません）
061-A-g1: 返事の一歩先。橋は4/6刻。初期候補S/K、真相固定。
061-B-g1: 長い方の道から来る。橋は2/4刻。同じ道でも出発地点で間に合うか違う。
061-C-g1: いま止める意味。初めから安全路でHへ移動。橋は6/8刻。
再開で真相は変わりません。Cは待たずに見守ることも正当な達成法です。

学習箇所
model.py: 不変データ、純粋advance/step、最短路、信念候補、予告、undo。
app.py: 入力と描画、解除待ちラッチ、日本語表示。真相と表示用候補を分離。
solver.py: 12刻までの全合法送信/待機列（undoは有限探索の外）、方策、管理変種。
test_model.py / test_ui.py: 境界、通信順序、候補真相保持、停止キー解除、描画純粋性。
実行: python -m unittest -v / python solver.py。
開発専用 tools/build_font.py / tools/export_video.py はPillow、後者はFFmpegも使用。

映像
media/radio_automatic_silent.mp4 は実Pyxelを自動入力で動かした無音映像。
749原フレームを各1回、30fpsへ渡し24.966667秒。GIFの遅延値では再サンプルしません。
人による操作動画・面白さの証拠ではありません。発音なし、音の実聴評価なし。
media/revision_1 はASCIIを拡大する前の表示証拠を保存したものです。

権利
コード: MIT (LICENSE.txt)。Noto Sans CJK由来の同梱グリフ: SIL OFL 1.1。
assets/NOTO-LICENSE.txt と assets/PYXEL-LICENSE.txt に全文。外部音源・画像は使いません。
