ちょっと前に Twitterで以下のような論理パズルをみかけたので、勝手に解説してみようと思います!!
私の知ってる論理パズルで最高難易度
— 逢空れい@在野ぴえん系応用数学者になる! (@rinnarua) January 4, 2022
頑張ったけどお手上げでした。解答知ってすごいと思った。ある程度正解には近づいてたけどもう一段階発想の大転換が必要だった。
チェス版の向きはドアの手前の面、その右、とかで指定可能です
完全に自力で解けた人いたらガチで尊敬する pic.twitter.com/RwBnGuhkNG
問題
問題文が画像なんですが、(写経がめんどかったので) 転載しますね
読みましたか?
特に、幼女Aは1. と 2. のいずれかの操作をちょうど1度だけ 行います
(私は最初問題文を誤読してたので大事なところを強調しました)
以下、ネタバレになるので自分で考えたい人は考えてみてください
↓
↓
↓
↓
↓
前提になる知識
排他的論理和 (xor)
解説
幼女たちが事前に決めておくべきことを、4つに分けて書きます
1. 数の置き換え
1以上64以下というのは、若干都合が悪いので、0以上63以下に置き換えます
つまり、以下のことをします
* 幼女Aは、1以上64以下の数 を告げられる。
* 幼女Aは、0以上63以下の数 をチェス盤に何かしらの方法で残す ()
* 幼女Bは、0以上63以下の数 をチェス盤から何かしらの方法で読み取る
* 幼女Bは、1以上64以下の数 を回答する ()
64が都合が悪い理由は、6ビットに収まらない (2進数で7桁ある) のが理由です。
0~63ならばどの数もちょうど6ビットに収まります。
2. 盤に数を割り当てる
盤のマス目に0以上63以下の番号を1つずつ振ります。
以下は1例です
3. 盤で「数」を表す
さて、幼女Aが幼女Bに数を伝えるには、盤面にその数の情報を残さなければなりません。
ここで、ポーンが置いてあるマス目の番号たちの排他的論理和を とします (1つも置かれていない状態は とします)
例えば、以下のように にポーンが置かれている場合、
をこの盤面が表す「数」とします。
こう決めることによって、幼女たちは意思疎通の準備ができました!
4. 幼女たちの役目
幼女Aの役目
- 1以上64以下の数 を聞き、0以上63以下の数 に直します
- 次に現在の盤面の「数」を読み取ります。つまり、ポーンの置かれているマス目の番号たちの排他的論理和を計算します。これを とします。()
- と の排他的論理和を求め、 とします。()
- の位置が空きマスならばポーンを置きます。ポーンがあるならば取り除きます。
なぜこれで上手くいくのか気になるかと思いますが、後ほど解説します(☆)
幼女Bの役目
- 盤面の「数」を読み取ります。つまり、ポーンの置かれているマス目の番号たちの排他的論理和を計算します。これを とします。()
- 1以上64の数 を回答します。
なぜこれで上手くいくのか?(☆)
ここが最も大事で、最もおもしろいです。
幼女A は、 となる を求めました。
の位置が空きマスだった場合、ここにポーンを置きました。
幼女Bが読み取る、この盤面はどうなっているでしょうか?
を作ったポーンの集合に を加えるのだから、 になるはずですよね。
これに を代入すると、
となり、求めたい数が読み取れました!
なんと初期盤面である が2回現れて相殺されています。
初期盤面はどんな配置でも良かったことがわかりますね。
また、 の位置にポーンがすでにあって取り除いた場合も、置いた場合と同じ演算で考えられます。
の位置のポーンを初期盤面から取り除いたものを として、ですよね。
両辺に をxorすると、 となり、
結局 を求めたのと同じ式 で求められます! ()
おわり
初期盤面がどんな配置であれ、この方法で解けるのが面白いな~と思いました。
あと、幼女、すごいね。