047 屋上菜園
今日の食材として摘むか、種まで残すか。その大葉は隣へ影を落とします。

単独起動
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で開始。矢印で鉢を選びZ。
空鉢: 種1を使い苗0へ。大葉2: 食材2へ。種さや3: 種2へ。株は取り除かれます。
苗0・若葉1には収穫できません。手入れとCの全食材納品は時間0です。
SPACEで夕方の成長を確定し、翌朝へ。最終朝はSPACEで締めます。
Xで一操作戻す、Rで同じ状況を再開、Pで説明/停止、Mで表紙、1～3で状況選択。
説明中はX無効、R/状況選択は有効。状態切替後は全キーを離してから次の操作。

公開ルール
大葉2・種さや3は、太陽Wなら東隣、Eなら西隣の同じ行1鉢へ影を落とします。
影は朝の手入れ後の株から一度計算。影でない株は夕方に同時に1段階育ちます。
その夕方に大葉になった株が、隣の成長を後付けで止めることはありません。
段階3で成長停止。曇りCは全株休み。食材は腐らず、何日でも考えられます。
期限の朝も手入れと納品が可能。翌日へ進む/締めるときに期限の累計納品を判定。
最終朝には翌週用の種も残します。未達を確定してもXで戻せます。

状況
A 食材2＋種1。今摘む案と採種して植える案、両方が成功します。
B 太陽が一日だけ東へ。食材6＋種2。隣の株と方向を見て順序を変えます。
C 朝2に食材2、朝6に累計10＋種1。曇りをはさんで次の世代を育てます。

検証と証拠
test_model.py/test_ui.py: 純粋モデルと入力・全描画状態の回帰。
solver.py: 朝の全手入れ組合せを列挙し、同一状態をまとめる可解性探索。
plans.py/solution_logs.json: 各状況の成功2列と一操作ごとの状態。
experiments.py/comparison_results.json: Bの影あり/なし、同一初期データの一変更比較。
media/automatic: 実際のPyxel描画による自動操作動画。人の試遊ではありません。
media/comparison: 比較用の実Pyxel画像。media/native: Linux実入力観察。
MP4はGIFの全749フレームを1回ずつ30fpsへ、24.966667秒、音声トラックなし。
元GIFの10ms単位の遅延値から速度を推測しません。フレーム数と時間はffprobe検証。
人による面白さ、実機Windows、音の品質は未確認。ゲームは意図的に無音です。

ライセンス
ソースはLICENSE.txt。日本語の同梱ビットマップはNoto Sans CJK由来、SIL OFL 1.1。
assets/NOTO-LICENSE.txt参照。フォント再構築にだけPillowと元のNotoフォントが必要。
