023 一筆の庭 — 技術・設計・実操作の確認
2026-10-02 UTC / Python 3.12 / Pyxel 2.9.9 / cloud Linux

A 技術
31自動テスト成功（test_results.txt）。
・modelはPyxel非依存。Level/State/Result/Gardenを不変データとして分離。
・範囲、格子辺、辺再使用、非始点の再進入、最小４辺、空領域、予算超過を検査。
・不合法入力はpath/closed/successを変えない。表示メッセージと監査イベントだけが更新される。
・閉路は盤外flood-fill。全長方形、盤面端、１セル、L字、凹形、時計／反時計を照合。
・閉鎖後Zは閉じ辺を取り除き、成功を解除。Rは同じ配置のひもだけを消す。
・P停止中は論理行動を受け付けず、Rなら同配置で再開。
・長押しは１回。矢印の同時／ずれ押しは拒否。Start、Next、Pause/Resume、Resetは全操作キーの解放を要求。
・開始＋方向、N＋SPACE、R＋SPACE、P＋SPACEの同時・ずれ押しをモック検査。
・未完了の輪でSPACEを押すと状態を保って「始点へ戻り、輪を閉じよう。」と表示。
  独立レビューで、この経路のメッセージが空になる問題を発見し修正。専用の回帰テストを追加。
・全文字をタイトル、全メッセージ、停止、結果、通常、デモで描画し、384×432内とglyph存在を検査。
  最下段の「自動操作・無音」はy415、14px領域が429未満で収まる。
・Noto CJKから必要字形を生成。SIL OFL同梱。外部フォントを遊ぶ側で取得する必要なし。

可解性と列挙
tools/enumerate.cppは最小番号頂点を根とし、単純な頂点路だけをDFSで延長。
距離下界で予算外だけを枝刈りし、開始点への再接続を列挙。根と向きで重複除去。
時間・ノード数・評価関数による打切りなし。領域maskで同じ内側セル集合を正規化。
セルの中心で独立したレイ交差法を使い、公開した全候補証明をPythonの合法手とflood-fillで再生。
A：12辺以下、711領域。必要2、最大2。選択した最小解は4辺／面積1。
B：14辺以下、3,072領域。必要5、最大6。通常解6辺／面積2／日2＋月3。
B全6本：14辺／面積6／日3＋月3。凹形で単純閉路。必要にしない任意の解。
C：16辺以下、24,411領域。必要5、最大5。全6本の解はこの条件下に存在しない。
C大長方形：14辺／面積12／日4＋月0＝4、不足。
C L字：14辺／面積6／日3＋月2＝5、成功。
solver_results.jsonに各開花数の領域数、最小長、面積範囲、頂点証明を保存。
独立レビュアーから、Aの65,535セル部分集合の全検査で711領域が一致し、
B/Cの31証明でwindingとflood-fillが一致したとの結果を受領。独立検査一式は親側に別保存。

B 設計レビュー
主な選択：同じひもの予算で、日花を中へ入れ、月花を外へ残す輪の形を選ぶ。
・Aの１セル解を許す。Bの５本の短い解も許し、全６本は任意。
・最小１セルの最大開花はA2/B4/C3。最小輪だけで全３面は解けない。
・最大面積の最大開花はA2/B4/C4。面積優先だけではB/Cを解けない。
・長方形の最大開花はA2/B5/C4。Cでは凹形を選ぶ意味がある。
・全盤面外周はA16/B18/C22辺で各予算を超す。全種を囲うC大長方形は予算内だが4本。
・いつも同じL字は、サイズだけでなく花の配置に合わせなければ成功しない。
  特定の１形状が全盤面で絶対に通らないという強い主張はしていない。
・面積加点、時間、残機、別解へのペナルティはない。

一変更比較
Cの配置、予算16、必要5、日花の規則を固定。
実験基準＝月花も中。変更版＝月花だけ外。
同じ大長方形：基準6本成功→変更版4本不足。
同じL字：基準3本不足→変更版5本成功。
両方のルールで可解な証明を保存。比較画像4枚を実Pyxel rendererで生成。
これは作為的な比較用基準で、歴史上の旧版でも、人の好みの測定でもない。

C クラウドLinuxの実入力（エージェント操作）
2026-10-02 19:01–19:05 UTC。共有GUIの専用枠を得てApplication Finderからlaunch.shで起動。
・タイトルのSPACE900msで開始のみ。描画は始まらない。
・方向900msで１辺のみ。P停止後の方向入力で辺数不変。
・Aの(1,1)から右・下・左・上・提出で2/2成功。
・Zで閉じ辺だけを戻す→再閉鎖・提出で成功復元。
・N+SPACE600msでBへ移るが、始点は未設定。
・Bの(1,1)から右・下・下・左・上・上・提出で5/5成功。
・Cの(1,1)から右4・下3・左4・上3・提出で4/5、輪保持。
・R+SPACE600msでひも0、配置保持、始点は未設定。
・Cの(1,1)から右4・下1・左3・下2・左1・上3・提出で5/5成功。
・途中SPACE表示修正後にゲームを再起動し、１辺引いてSPACEを押し、案内文と辺保持を確認。
・ESC終了、023ウィンドウ不在を確認してGUI枠を解放。
主要3解のnative画像は途中SPACE修正前の描画から保存。モデル・成功経路は同一。
最終修正後は上記の回帰操作、31自動テスト、全デモを再実行。
これは人の初見試遊ではない。ネイティブのずれ押し到着時刻を厳密に測定したわけでもなく、
ずれ押しのフレーム単位保証はモック検査と区別して記録する。

D 納品・映像
単独setup/play BATはASCII・引用済パス・失敗時pause。Python全text I/OでUTF-8を明示。
cp932既定、日本語/空白パス、arbitrary cwdでglyph読込・タイトル描画・31テストを再検査。
Mac/Windows実機のSDL/キーボード動作は未検証。
実Pyxel renderer PNG、779frame GIF、779frame MP4を同梱。
デモはA通常→B通常→B全6本→C大囲い未達→C L字成功。
MP4は各GIFフレームを一度だけPNGへ展開し、n/30秒へ再配置。GIFの0.03秒遅延は使わない。
30fps、25.966667秒、779フレーム、音声ストリーム0をffprobeで確認。
動画・比較画像・日本語UIを目視確認。全画面の文字は境界内。
クラウドに音声デバイスが無く初期化警告は出るが、ゲームは無音設計。音の実聴品質は主張しない。

Cの残る確認
人による初見理解、納得感、別の形を試したくなるかは未検証。
質問：なぜその花を外にした？ 大きく囲むのをやめた場所は？ 別の形も試したい？
結論：実装・機能検証済み／面白さは人による確認待ち。公開投稿はしていない。
