先週のクイズの解答

実はかなり簡単だったという例の問題。
答えがなんと十数パターンぐらいあるっぽい。
詳しく調べたわけじゃないから、実はもっとあるかも。
で、肝心の答えだけど、その前に問題をもう一度確認。


「あるところにA、B、C、Dという人がいました。
 ところが突然A、B、Cは記憶の一部を失ってしまいました。
 失った記憶は、Aは自分とCの、Bは自分とAの、Cは自分とBの年齢です。
 つまり、AはBの、BはCの、CはAの年齢は覚えているのです。
 また、A、B、Cはそれぞれが18歳、19歳、20歳のどれかであることも覚えています。
 当然Dは全員の年齢を覚えています。
 このとき、A、B、Cのうちの誰かがDに1回だけ質問することでA、B、C全員が全員の年齢をわかるようにしてください。
 ただし、質問はDがYESかNOで答えれるものに限定します」


この問題で重要なのは、1回の質問の中で1人の年齢を決定してしまうことだ。
質問に対するDの回答じゃなくて、質問の時点でということ。
たとえば一つのパターンを使って説明すると、答えの質問はA、B、Cの中で分かっている年齢が18歳の人(ここではBがCの年齢が18と分かっているとしよう)、つまりBがこんな質問をすればいい。
「AさんはCさんより2歳年上ですか?」
これによって何が分かるかというと、この質問はCが18歳であることを前提とした質問だということだ。
つまり、Cが18歳でなければこんな質問はNOしか返ってこないんだから意味がない。
よって、質問したBは当然、AにもCにもCが18歳であることが伝わるわけだ。
あとはBから見た場合はYESなら当然Aが20歳なので自分は19歳。
NOならAが20歳じゃないということは残りは19歳しかないので、自分は20歳。
Aから見た場合はYESなら自分は20歳ということなのでBが19歳。
NOなら自分は20歳じゃないので残りの19歳となる、つまりBは20歳。
Cから見た場合はYESならAが20歳とわかるのでBは残りの19歳。
NOならAが20歳じゃないということは残りの19歳なので、Bは20歳。
こんな感じで分かるわけだ。
ちなみにこれは分かっている年齢が20歳の人(このときCがAの年齢が20歳と分かっているとする)、つまりCが「BさんはAさんより2歳年下ですか?」と聞く場合も同様な考え方ができる。
他にも同じように質問した時点で一人の年齢が全員に伝わる方法があるので、考えたい人は考えてくれ。
というか、かなり簡単だけどな。
まあ、次はもっと難しい問題をがんばって考えてみよう。