024 まちがい時計：5段階のPython/Pyxel教材

共通条件：Python 3.11以上、Pyxel 2.9.9（requirements.txtで固定）。
各番号の.pyは単独プログラム。前の段階や原作、画像、フォントは不要です。
詳しい日本語解説はLESSON.md。画面はPyxel標準ASCIIと図形、音声処理なし。
原作のC「まだ二つある」だけを採用します。全3票の移植ではありません。

Windows（PowerShell、Python 3.11以上導入済み）
1. このフォルダーを展開します。ZIPの中から直接起動しないでください。
2. ターミナルでこのフォルダーへ移動します。
   cd "C:\教材\024_wrong_clocks"
3. 共通の仮想環境を1回作成します。
   py -3 -m venv .venv
4. 固定バージョンを導入します。初回はネット接続が必要です。
   .\.venv\Scripts\python.exe -m pip install -r requirements.txt
5. 起動します。仮想環境のactivateやPowerShell実行ポリシー変更は不要です。
   .\.venv\Scripts\python.exe -B 01_offsets.py
番号を02_differences.py、03_assignments.py、04_possible.py、05_puzzle.pyへ変えて次へ進みます。
py -3 --versionで3.11以上を確認してください。古い版なら導入済みの新しい版を選びます。

macOS / Linux（ターミナル、Python 3.11以上導入済み）
   cd "/教材の場所/024_wrong_clocks"
   python3 --version
   python3 -m venv .venv
   .venv/bin/python -m pip install -r requirements.txt
   .venv/bin/python -B 01_offsets.py
同じ.venvを5段階で共用します。教材本文のpythonコマンドはこの仮想環境のPythonを指します。
フォルダーの場所に日本語や空白があっても、パス全体を引用符で囲んでください。
本教材の実行処理は絶対パスを埋め込まず、カレントディレクトリにも依存しません。

操作
01〜04：左右で時計、上下でずれ（-2..+2、端で停止）。
03〜04：Nで次の成立割当。04：Xで選択時計が0になる証拠行。
05：矢印で時計、Spaceで候補を付け外し、Enter提出、X仮置き、Z候補変更を戻す。
全段階：R初期化、Esc終了。1回の操作ごとに操作キーを全部離します。
複数の操作キーを同時に押した場合は無効。矢印の長押し反復はありません。
05で成功後のSpace/Enterは状態を変えません。Zで編集へ戻り、Rで最初からやり直せます。

原作の規則と段階の境界
ずれは整数、実時刻の当てものや12時間の循環ではありません。
全台のずれは-2..+2、0はちょうど1台。B−A=1、C−B=1、D−C=1。
全条件を満たす割当のどれかで0になる時計が答えの候補です。
2台を候補に選ぶことは、その2台が同時に正確という意味ではありません。
01は有限編集、02は差だけ、03は全条件の列挙、04は候補を公開する分析台、05で選択ゲーム。
原作のタイトル、3票選択、説明停止、Nで次の票、F12、動画、Noto字形は省略。
05のデータ・純粋モデルは原作Cと直接照合。入力方式・画面は教育用に簡略化しています。

テストと実描画
標準ライブラリだけのテスト（Pyxelと原作不要）：
   python -B -m unittest -v test_stages.py
実際のPyxel headless描画、合成Controller入力、単独ファイル隔離：
   python -B tools/render_qa.py
初期画面だけ保存する例：
   python -B 01_offsets.py --headless-smoke --screenshot initial.png --report initial.json
最終段階のB/C選択と提出の例（T=右、S=Space、E=Enter）：
   python -B 05_puzzle.py --headless-replay TSTSE --screenshot win.png --report win.json
通常GUI時は画像・JSONを自動保存しません。headlessの相対出力先は起動した作業場所が基準です。
利用可能な合成入力は各ファイルの--helpで確認できます。存在しない段階の入力はエラーにします。
原作ともう一度直接比較したい場合だけ、原作フォルダーを明示します：
   python -B tools/verify_original.py "原作024_wrong_clocksのフォルダー"
配布ファイルのhash検査：
   python -B tools/check_freeze.py
各QAを再実行すると記録ファイルが更新される場合があります。配布時hashと違うこと自体は故障ではありません。
QA.txtに実行環境、件数、比較範囲、未検証事項を記載しています。

よくあるエラー
・python / pyが見つからない：Python 3.11以上が導入されているか確認し、ターミナルを開き直します。
・No module named pyxel：起動に使った同じ.venvのPythonでpip install -r requirements.txtを実行します。
・can't open file：cdした先、ファイル名、引用符を確認します。ZIPを先に展開してください。
・venv / ensurepipエラー：OS配布のPythonでvenv機能が分離されている場合は、OS公式手順でvenv対応を整えます。
・画面が開かない：通常起動にはデスクトップ描画環境が必要です。SSH等では--headless-smokeで切り分けます。
・音声デバイス警告：教材は無音です。Linux headless QAはSDL_AUDIODRIVER=dummyで実施しました。
・日本語が文字化け：ソース・文書・JSONはUTF-8です。エディターでもUTF-8を選びます。
・キーが反応しない：画面へフォーカスを当て、操作キーを全て離し、1個だけ押します。
・01/02でN、01〜03でXが使えない：その段階ではまだ実装していません。
・Bだけでは成功しない：もう1つの成立割当でCが0です。可能性をすべて選びます。

権利
原作LICENSE.txtをLICENSEへ原文保存。Pythonファイルにも原作MIT全文をコメントで保持。
Noto資産は使いません。原作のライセンス末尾のNoto注記は原文保持のため残っています。
Pyxelは外部依存ライブラリです。この教材は原作の出所や原作著作権表示を変更しません。

確認の限界
cloud Linuxの実Pyxel headless描画と合成入力を確認します。人間の試遊、実OSキー入力、
Windows/macOS GUI、Python 3.11そのもの、ブラウザ、聞こえる音は未検証です。
Site公開・新規インストール・ユーザーPC操作は行っていません。

権利表記の補足: 教材にはNoto由来の字形データを含みません。原作LICENSEからの参照を辿れるよう、原文のSIL OFLをassets/NOTO-LICENSE.txtに文書だけ同梱しています。
