ディスカッション (11件)
父の書斎を整理していたら、かなり古いチェスの本が出てきました。そこに載っていたこのパズルが非常に面白かったので共有します。
すごくいいんだけど、駒を動かすたびに毎回「Check」ボタンを押さないといけないのがちょっとね。自動でチェックしてくれたらいいのに。
面白いね。驚いたことに解が388通りもあって、直感に反するものも結構多い。
[コードブロック省略]
最初は、なるべく広範囲をカバーするためにクイーンを別々の行や列に置くべきだと思ってたんだけど、実際には同じ行に3つもクイーンが並ぶような解も存在するんだよね。
Pythonスクリプト: https://gist.github.com/dllu/698d5f71b2b9735c5c462ddf4a2f6fc... (https://gist.github.com/dllu/698d5f71b2b9735c5c462ddf4a2f6fcf)
仕組みはこんな感じ:
-
各クイーン/ビショップの配置における攻撃範囲をビットマスクとしてあらかじめ計算し、整数として保存しておく
-
5つの駒の配置をブルートフォースで全探索し、遮蔽を考慮せず攻撃範囲のビット論理和をとって候補となる解を生成する
-
候補の中から、遮蔽を考慮して実際に有効なものをチェックする。実際には、クイーンの水平方向の攻撃がビショップに遮られているかを確認するだけでいい。クイーン同士は互いを遮断できないからね(遮断する側のクイーンも同じ攻撃範囲を持っているため、実質的にすり抜けることになる)。
課題は、白のキングをどこに置いてもチェックメイトになるように、黒のクイーン4つと黒のビショップ1つをチェス盤に配置することです。
最後の単語は「チェックメイト」じゃなくて「チェック」であるべきだね。守られていないクイーンの隣にキングを置いても、キングでクイーンを取れるからチェックメイトにはならないよ。
待って、説明がちょっと曖昧じゃない?「Solution」を押してみたら、白マスに黒マス用のビショップが置いてあるんだけど!XD
「黒マス用ビショップは黒マスに限定されない」って一言説明に付け加えた方がいいかも。
楽しいデモだね。他の人の提案を組み合わせてデイリーパズルにしても良さそう。解は(自分で確認してないけど)388通りあるみたいだし、1つ以上の駒を取り除いて、1手以上で解くクイズとか面白いんじゃないかな。
あと、マスをクリックしたら自動でクイーンが置かれて、もう一回クリックしたらビショップに入れ替わるみたいな操作感だと嬉しい。クリックするたびに自動チェックが入るとか。
別モードとして、駒を置くたびに攻撃範囲を視覚的に塗りつぶしてくれるモードもあるといいかも。多くの人にとっては、頭の中でイメージするよりそっちの方が楽だろうし。
ちょっと関連してるんだけど、他にもチェスのミニゲームを探してる人がいたら(念のため共有しとくね)。
https://knight-queen-game.netlify.app/ (https://knight-queen-game.netlify.app/)
このパズル、絶対どこかで見たことある。どこだったかは思い出せないけど。
これで解いてみたよ。美しい対称形になった。クイーンを全部1列に並べても解が存在するのには驚いた。
[コードブロック省略]
課題は、白のキングをどこに置いてもチェックメイトになるように、黒の駒を配置することです。
これ、少し曖昧だし、提示されている解からすると厳密には間違ってると思う。
特に、これだと「チェックメイト」を要求してるように読めるよね。それだと黒の駒同士が互いを守り合う必要があるのか?そうじゃないと、クイーンの隣に置かれたキングは即座にクイーンを取れるからチェックメイトにならない。
解を見る限り、チェックメイトじゃなくて単なる「チェック」の要件だね。
「チェック」モードで赤と緑を使うのはやめてくれないかな。色覚多様性がある人には区別がつきにくいから(特に黒マスの網掛けと重なるとね)。
そもそも色を2種類使う必要ってある?駒に攻撃されているマスだけに色をつけて、残りは白紙のままにしておけば十分意味は通じるよ。