Redundanz

僕の言葉は、人と話をするためにあるんじゃない。

論理パズル

 Twitterに流れてきた論理パズル、ぼんやり考えていたら解けたのでまとめておく。

 正直天使、嘘吐き天使、気まぐれ天使の3人がいる。正直天使は必ず本当のことを言い、嘘吐き天使は必ず嘘をつく。気まぐれ天使の返答はランダムで正しかったり間違っていたりする。
 これらの3人の見た目はどれも同じで、傍目には誰が誰だかわからない。これをyesかnoかで答えられる質問を3回することで判別したい。ただし、質問はそれぞれ一人についてしか出来ない。また、彼らは天使の言葉でyes/noを意味するダ/ジャで返答するのだが、ダとジャがyes/noのどちらを意味するのかあなたは知らないとする。

 とりあえず3人をA,B,Cとおきます。
 はじめに何をしようか迷ったのですが、まずは気まぐれ天使を除く事にしました。ダ/ジャの意味はまだ分かりませんが、〇〇と問われればあなたはダと答えますか?と言う問いに対してダ/ジャのどちらが返ってくるか、ということを考えれば、それが肯定か否定か分からずとも情報を得ることが出来ることに気付きました。
 例えばAに「あなたはBが気まぐれ天使かと問われればはいと答えますか」と聞いてみます。もし天使たちがはいかいいえで返答してくれるなら、次の4通りが考えられるでしょう。(Aが気まぐれ天使である場合は今は考えません)
 A:正直 B:嘘吐き 返答:いいえ
 A:正直 B:気まぐれ 返答:はい
 A:嘘吐き B:正直 返答:いいえ
 A:嘘吐き B:気まぐれ 返答:はい
 上のように、返答がはいの場合はAが正直者にせよ嘘吐きにせよBは気まぐれ天使です。
 同様に、Aに「あなたはBが気まぐれ天使かと問われればいいえと答えますか」に対する返答は次のようになります。
 A:正直 B:嘘吐き 返答:はい
 A:正直 B:気まぐれ 返答:いいえ
 A:嘘吐き B:正直 返答:はい
 A:嘘吐き B:気まぐれ 返答:いいえ
 したがって、次のことが言えるのです。
・Aに「あなたはBが気まぐれ天使かと問われればダと答えますか」と質問して、その返答がダであればBは気まぐれ天使である。ジャであればBは気まぐれ天使ではない。
 ここで重要なのは、この時、気まぐれ天使ではない天使を一人確定することが出来る、ということです。もし仮にAが気まぐれ天使であった場合は、B,Cはともに気まぐれ天使ではありません、またAが気まぐれ天使でなかった場合は、上記の質問によって気まぐれ天使を判別できます。したがって、上記の質問によって気まぐれ天使でないことが示された天使は、絶対に気まぐれ天使ではないのです。
 さて、ここではBが気まぐれ天使ではなかったとしましょう。次はBに対して同様の質問をします。例えば「あなたはAが気まぐれ天使かと問われればダと答えますか」、などです。Bは気まぐれ天使ではないことが確定しているので、Bにこの質問をすることで、気まぐれ天使を確定させることが出来ます。
 後は正直天使と嘘吐き天使を見分けるだけです。「あなたは自分が正直者であるかと問われればダと答えるか」などと質問をすれば、その返答によって二人の判別は容易にできます。(このへんは(-1)×(-1)=1と似たような雰囲気があります)

 調べたところこの問題は最も難しい論理パズルの一つらしいです。確かにはじめは何が何だかこんがらがって面食らうのですが、はいといいえの持つ情報量が同じであることを考えれば、それを利用する方法を模索することが出来ます。製作者の頭の良さが光る解いていて楽しいパズルでした。