048 お弁当列車
足りなかったのは弁当ではなく、取り出す順番。
棚2列・奥行3。全部の駅の注文を見てから積み、手前から販売します。

単独起動
Windows: Python 3.10以降を用意しsetup.bat、次からplay.bat。
macOS/Linux: bash setup.sh、bash play.sh。
実行時はPyxel 2.9.9と標準ライブラリだけ。このフォルダだけで動きます。
開発用launch.shはクラウド検証環境専用です。
Windows実機は未確認。既定cp932/日本語空白パス/任意cwdは模擬検証済み。

出発前
SPACEで表紙から開始。1～3で状況選択。
左右で箱番号、上下で行先（棚A/棚B/倉庫）、Zで移動。
棚へ入れる箱は手前に入ります。満杯の棚への移動は拒否、消費なし。
Cで選択した箱と、その棚の次の箱を入れ替え（最後なら手前と交換）。
全て時間0。倉庫へ出してから積む方法でも、自由に順を作れます。
SPACEで出発。出発棚は記録され、Rのあと前回の品種順を表示します。

各駅
上下で棚A手前/棚B手前/手持ちを選びます。
Z: 1個販売。現在駅の残注文に合う品だけ売れます。
C: 選択棚の手前を手へ取る。手は1個まで。
V: 手の箱を選択棚の手前へ戻す。棚は3個まで。
販売、取る、戻すは各作業1。棚間の直接移動や奥を抜く操作はありません。
作業0で次駅へ自動発車。SPACEで早く発車もできます。
次駅へは手持ちをそのまま持ち越します。無料で棚へ戻りません。
約0.4秒の運行表示中は決定入力を受けません。世界の処理は確定時に原子的に行います。
X: 1作業/発車/積載操作を戻す。R: 元の在庫と初期提案へ。P: 説明/停止。M: 表紙。
説明中のXは無効。R/状況変更は有効。状態切替後はキーを離してから次を押します。

目標
A 6個販売。駅順に積むと持ち替えなしで完走できます。
B 5個以上。提案棚では手へ1個避ければ6個、積み直せば持ち替え0でも6個。
   5個で完走する安全な案も成功扱いです。
C 在庫7個から6個。注文は7個なので1件は見送ることになります。
   F3/V1/E2でもF2/V2/E2でも6個販売でき、どの注文を残したかを表示します。

証拠
model.pyはPyxel非依存。test_model/test_uiで所有・作業・入力・描画境界を検証。
solver.pyは初期提案からの全合法状態を列挙。plans.py/solution_logs.jsonに3面×2成功列。
comparison_results.jsonはBの手前のみ/任意位置取出しの一変更比較。
これは制作史上の旧版ではありません。両版とも同じ在庫・注文・作業数です。
media/automatic: 実Pyxel自動入力、749フレーム/30fps/24.966667秒、音声なし。
media/native: エージェントのLinux実入力。media/comparison: 比較用実描画。
人による面白さ、Windows実機、音の実聴は未確認。意図的に無音です。

ライセンス
ソースは全文MIT（LICENSE.txt）。同梱日本語ビットマップはNoto Sans CJK由来。
SIL OFL 1.1（assets/NOTO-LICENSE.txt）。実行時に外部フォントは不要。
フォント再構築と動画書出しの開発ツールのみPillow/ffmpegが必要です。
