【投稿下書き・未公開】
Pyxel 100本ノック #013「棚からぼたもち」
抜く一枚と、残す一枚を考える

もちの下にある板を抜いて、白い皿へ落とす。
今回作ったのは、これだけを出発点にした小さな支持パズルです。
全部の板をなくす必要はありません。石が載っているなら、その板を
残したまま、下のもちだけを先に届けてもいい。

「落ちるものを見る」だけで終わらないように、3つの棚を用意しました。
最初は1手の導入。次は石の支えを残す面。最後は、二つのもちを共通の
受け板へ載せると、その両端の支持が重さに耐えられなくなる面です。
一つを受けたところで受け板を抜けば安全。最初から受け板を抜く
短い方法も正解にしました。分かった人に遠回りをさせないためです。

作っている途中、設計図の矛盾が見つかりました。
「板は回転せず真下に落ちる」と「片方に柱が残っていても落ちる」を
両立させようとすると、板が柱をすり抜けてしまいます。
そこで、触れている支えがあれば止まり、片側しかなければ重さが
その側へ全部移る模型にしました。現実の棚の物理計算ではありません。
回転しない約束を最初に伝え、その範囲で見た目と結果を揃えています。

技術面では、接触を盤面の座標から計算し、上から下へ重さを渡します。
荷重は分数で扱い、耐荷重と等しいときは壊れません。
超えた支持は、ひとつずつ順にではなく、同じ荷重の計算結果から
まとめて割ります。走査する配列の順番で結果を変えないためです。
Zで一手戻せば、除去した板・壊れた支持・もちの位置も元どおりです。

比較は一つだけ。最後の棚で、E/Fの耐荷重が無制限の基準版から、
1.25にした版を残しました。「二つ載せてから抜く」と
「一つ載せて途中で抜く」の結果が、本当に変わることを確認しました。
ただし、これだけで奥深さや面白さを証明したつもりはありません。

全ての合法な除去順を調べ、3面とも成功する手順を保存しました。
添付動画は実際のPyxel画面を自動操作した約24秒の無音映像です。
人による試遊ではないので、初見で荷重を読めるか、失敗の理由が
伝わるか、もう一手試したくなるかは、これから確かめたいところです。

遊んでもらったら聞きたいことは二つ。
「その板を、なぜ残した？」
「割れたのは、どこの重さが増えたから？」

コードを増やすより、抜く順序が変わる小さな理由を大事にした一本です。
