難問論理クイズ「幼女と3人のパーティー」が見た瞬間に諦めるレベル

ボーイエンガールズ、『待たせた』な。

久しぶりに難問の論理クイズだ……。

覚悟はいいか?

『問題を見ただけで解くのをあきらめる覚悟』だ。

ぼくはできてる。

問題

あるパーティーに3人の幼女A,B,Cが招待された。

以下は、幼女たちの発言である。

パーティー2日前:
幼女A「Bはパーティーに行くよ」
幼女B「Cはパーティーに行かないよ」
幼女C「私が出席する場合だけAもパーティーに行くよ」

パーティー1日前:
幼女A「私が欠席するならCは出席するよ」
幼女B「私たち3人の中でパーティーに行くのは偶数人数だよ」
幼女C「Aはパーティーに行くよ」

パーティー当日:
幼女A「まだ2018年にはなってないよ」
幼女B「私が行くときだけAも行くよ」
幼女C「3人のうち少なくとも1人はパーティーに行かないよ」

この3人の幼女については以下の事実が判明している。

1人だけ絶対に嘘をつかない幼女がいる。

別の1人は、今日が2で割り切れる日なら嘘をつく。それ以外の日なら真実を言う。

残る1人は、今日が3で割り切れる日なら嘘をつく。それ以外の日なら真実を言う。

問題
(1) パーティーに出席する幼女は誰?
(2) パーティーの日程が将来だとすると、開催は西暦何年の何月何日だろうか?

※問題文が発表されたのは2015年8月18日である

さあ、解いてみよう!

どう思った?

「いいからパーティー行ってくれ」とシャウトしなかったか?

ぼくかい?
もちろんしたさ。
お隣さんから鉛のお手紙が届いたよ。

さて、こいつは相当にハードな問題だ。

いきなり「まだ2018年じゃない」と言われた時は「クイズによくある無意味なダミー回答」かと思ったが2で割り切れるdayエトセトラのあたりで目まいがしたね。

一体どうしてクイズで扱いやすいような日にわざわざ嘘をついてくれやがるんだ。

まあいい。
これ以上壁に穴が空かないうちに問題のポイントを振り返っていこう。

問題のポイント

膨大な情報量

9つの発言。
そして「○で割り切れる日のみ嘘をつく」といった幼女の特徴。

どう考えても無理ゲーだ。

何から考えればいいのかすら分からない。

とりあえず問題文をよく読んで考えてみるしかない。

何か、ちょっと変換すれば手がかりとして使えそうな文章はないだろうか?

大問2つ

(1) パーティーに出席する幼女は誰?
(2) パーティーの日程が将来だとすると、開催は西暦何年の何月何日だろうか?

勘弁してくれ。

1つだけでもオーバーキャパシティなのに2つだと?

知るか。

みんな今日行け。

だが、問題における解答順というのは実は重要なものだ。

(1)から解け
(2)はその後で

ということなんだろう。

出題者の意図に全力で乗っかるべきだ。

日付に関する記述

幼女A「まだ2018年にはなってないよ」

(2) パーティーの日程が将来だとすると、開催は西暦何年の何月何日だろうか?

※問題文が発表されたのは2015年8月18日である

今のところ、パーティーの日付について直接的なヒントになりそうな記述はこれだけだ。

いや……これ解けるのか?
本当に?
エスパー必須じゃないのか?

どう考えても日付に関する情報量が少なすぎる。

わからん。

こんな時はアレだ。
できることからコツコツやっていくしかないな。

ヒント

以下、ヒント編だ。

自力で解きたいっていう猛者はここで閲覧をやめておくんだな。

まあ見ても問題ないぜ。

ヒントを見ても即座に解答にはたどり着けないくらい複雑だからな。

最初に言っておく。

この問題の難しさは「道のりが長いこと」。
それに尽きる。

第1のヒント

2日連続で嘘をつける幼女はいない

最初からビッグヒントで悪いな。

正直これを理解しておかないと何も始まらないんだ。

なぜ、幼女は2日連続で嘘をつけないのか?

3人の幼女は

「決して嘘をつかない幼女」
「2の倍数日だけ嘘をつく幼女」
「3の倍数日だけ嘘をつく幼女」

だ。

あとは分かるだろう?

第2のヒント

最初の攻略対象は「当日」における幼女Cの発言

C「少なくとも1人は欠席する」

ってやつだな。

これが「もし真実だとしたら」「もし嘘だとしたら」という仮定から始めてみるといい。

重要なヒントを出し過ぎじゃないかって?

大丈夫。

ぶっちゃけ現時点では正解への道のりが5%示されたに過ぎない。

いや本当に長いからなこの問題。

第3のヒント

「2で割り切れる」「3で割り切れる」あたりの要素は、2問目になってから考える

安心したぜ。

少しは考えることが減った。

第4のヒント

「既に判明している幼女の発言の真偽」と「特定の倍数日に嘘をつく幼女の性質」から、パーティー開催日の月日を割り出すが、この行程が最も複雑

いや、もう何か、もう何かな……。

書いてて「あれ? これ終わらないんじゃね?」と思ったのは超難問論理クイズ「2人の幼女とチェス盤の部屋」以降の記憶だ。

上記の論理クイズに挑んだタフガイは、あの長すぎるけれど徐々に謎が解けていく熱さをこの論理クイズで思い出してもらえるだろう。

第5のヒント

幼女の発言のうち、最後の最後でようやく真偽が判明するものが1つだけある

最後のヒント

本問には極めて論理的な解答が存在する

チェス盤のクイズと違うのはここだ。

本問では、飛躍的発想力は必要ない。

ただひたすらに論理の積み重ねだ。

必ず1つずつ謎が解けていけるようになっていて、ところどころ発想の転換を必要とし、そして最終的には「そんな前の伏線がここで役に立つのか」といったカタルシスも味わえる。

非常に美しいロジックだ。

余計な要素はひとつもない。

問題作った人は天才だと思ってる。

さすがNSAだ。

特に、

(2) パーティーの日程が将来だとすると、開催は西暦何年の何月何日だろうか?

の解答のあざやかさは挑戦した者に格別の報酬を与えてくれる。

極上の達成感という名のギフトを。

まだ間に合う。
最大のヒントは出していないからだ。

ぜひ自力で挑んでみてほしい。

そして感じてほしい。
論理クイズの楽しさを。

少し下にスクロールすると答えがある

 

 

 

 

正解

(1) 出席者はAとB
(2) パーティー開催日は2016年3月1日

解説

大前提

問題文から読み取るべき、最も大切なこととは?

登場人物は、

「決して嘘をつかない幼女」
「2の倍数日だけ嘘をつく幼女」
「3の倍数日だけ嘘をつく幼女」

の3人。

つまり?

2日連続で嘘をつける幼女はいない

これが最初の出発点だ。

誰がパーティーに参加する?

突破口

パーティー当日の幼女Cの発言に着目してみよう。

これがもし嘘だとすると、「3人全員がパーティーに行く」ことになる。

すると、幼女Bの「2日前」「1日前」の発言(「Cは欠席する」「出席は偶数人数」)で嘘をついていることになる。

––が、このシチュエーションは矛盾している。

幼女は2日連続で嘘をつくことができないからだ。

したがって、パーティー当日の幼女Cの発言は真実。
「少なくとも誰か1人はパーティーには行かない」ことが事実として確定する。

これまでのまとめ

2日前:
A「Bは出席する」
B「Cは欠席する」
C「私が行く時のみAも行く」

1日前:
A「私が行かない時のみCは行く」
B「出席するのは偶数人数」
C「Aは出席する」

当日:
A「まだ2018年ではない」
B「私が行く時のみAも行く」
C「少なくとも1人は欠席する」:真

判明した事実:
・少なくとも1人がパーティーに行かない

2つめのキーポイント

幼女Bの1日前の発言(出席するのは偶数人数)が嘘だとすると、(3人全員が出席することは上記で否定されているので)パーティーに出席するのは1人だけだ。

幼女は2日連続で嘘をつけないので、幼女Bの「2日前」と「当日」の発言は両方とも真実になる。

だが、「Cは欠席する」「私が行くならAも行く」という発言が両方真実ということはありえない。

両方とも真実なら、「出席するのはA,Bの2人、もしくは0人」となり「パーティーに出席するのは1人だけ」という前提に反する。

つまり幼女Bの1日前の発言は真実でなければならない。

ここで、パーティーに参加するのは偶数人であることが確定する。

これまでのまとめ

2日前:
A「Bは出席する」
B「Cは欠席する」
C「私が行く時のみAも行く」

1日前:
A「私が行かない時のみCは行く」
B「出席するのは偶数人数」:真
C「Aは出席する」

当日:
A「まだ2018年ではない」
B「私が行く時のみAも行く」
C「少なくとも1人は欠席する」:真

判明した事実:
・少なくとも1人がパーティーに行かない
・出席者は偶数人数

視点を変える

幼女Bがパーティーに行かないと仮定しよう。

するとAの2日前の発言(Bは出席する)は嘘になる。

ということはAの1日前の発言(私が行かない時のみCは行く)は真実になる。

この状況を整理すると、ありえるパターンは

A:×
B:×
C:○
あるいは
A:○
B:×
C:×
(○–出席、×–欠席)

のどちらかだ。

しかしこれでは出席人数が1人だけになってしまい、判明した事実と矛盾する。

つまり幼女Bはパーティーに出席する。

と同時に、「Bは出席する」と述べているAの2日前の発言は真実だと分かる。

これまでのまとめ

2日前:
A「Bは出席する」:真
B「Cは欠席する」
C「私が行く時のみAも行く」

1日前:
A「私が行かない時のみCは行く」
B「出席するのは偶数人数」:真
C「Aは出席する」

当日:
A「まだ2018年ではない」
B「私が行く時のみAも行く」
C「少なくとも1人は欠席する」:真

判明した事実:
・少なくとも1人がパーティーに行かない
・出席者は偶数人数
・Bは出席する

エンディングが見えた

偶数人数の出席が確定していることから、AかCのどちらか一方だけがパーティーに出席するはずだ。

この瞬間、Cの2日前の発言(私が行く時のみAも行く)はだと分かる。

AとCが一緒に出席することはありえないからだ。

Cの2日前の発言は嘘。
幼女は2日連続で嘘をつけない。

ということは?

Cの1日前の発言(Aは出席する)は真実。

さあ、ようやく答えが出た。

(1) パーティーに出席する幼女はAとB

おめでとう。

ところで、良いニュースと悪いニュースがある。

グッドニュースはもちろん1問目を解いたってことさ。

バッドニュースはまだ1問目しか解いてないってことだ。

2問目の解説文のボリュームは1問目と同量。

覚悟はいいか?

ぼくはあきらめた。

これまでのまとめ

2日前:
A「Bは出席する」:真
B「Cは欠席する」:真
C「私が行く時のみAも行く」:嘘

1日前:
A「私が行かない時のみCは行く」:真
B「出席するのは偶数人数」:真
C「Aは出席する」:真

当日:
A「まだ2018年ではない」
B「私が行く時のみAも行く」:真
C「少なくとも1人は欠席する」:真

判明した事実:
・少なくとも1人がパーティーに行かない
・出席者は偶数人数
・Bは出席する
・Aは出席する
・Cは欠席する

パーティーの開催日はいつ?

奇妙な初期状態

幼女A,Bの出席が確定された今、嘘の発言は幼女Cの2日前のコメントだけだと分かっている。

あと嘘の発言の可能性があるとしたら「幼女Aの当日の発言」だけだが、現段階では分からない。

9つの発言のうち、確定している嘘の発言は1つだけ。

「これまでのまとめ」を見てもらえればわかるが、普通に考えたら真実の発言が多すぎる。

つまり、普通じゃない何かが起こっているということだ。

月のトリック

「2日前」「1日前」「当日」の3日間が月をまたがない場合、「1日前」か「2日前&当日」のどちらかが2で割り切れないといけない。

3日間が月をまたがないなら、

「2日前→1日前→当日」
・偶数日→奇数日→偶数日
・奇数日→偶数日→奇数日

という構造になるからな。

この場合、幼女の発言の内訳は

  • 正直者の幼女:真→真→真
  • 2で割り切れる日に嘘をつく幼女:嘘→真→嘘
  • 3で割り切れる日に嘘をつく幼女:真→嘘→真

あるいは

  • 正直者の幼女:真→真→真
  • 2で割り切れる日に嘘をつく幼女:真→嘘→真
  • 3で割り切れる日に嘘をつく幼女:嘘→真→真あるいは真→真→嘘

となる。

しかし、このパターンでは現状の幼女の発言の真偽パターンには合致しない。

下記のまとめをよく見て欲しい。

実際の幼女の発言の真偽推移

2日前→1日前→当日

A:真→真→?
B:真→真→真
C:→真→真

以上のように、実際の幼女たちの発言は「3日間が月をまたがなかった場合の真偽パターン」と合わない。

ということは?

3日間は月をまたいで存在している。

「1日前」か「当日」のどちらかで月が替わって翌月の1日目になっているということだ。

ゾクゾクしてきたな。

問題の深刻さに。

複雑なif

パーティーの前日––「1日前」––が「○月1日」だとすると、パーティー当日はもちろん「○月2日」になる。

とすると、幼女Aは「2で割り切れる日に嘘をつく幼女」でなければならない。

消去法により、「2日前」にのみ嘘をついている幼女Cは「3で割り切れる日にのみ嘘をつく幼女」でなければならない。

3で割り切れる日に嘘をつく幼女が「2日前」(月末)に嘘をつくことはできるだろうか?

できない。

じっくり考えてほしい。

「3で割り切れる日」かつ「月末」に該当する日付は30日のみ。

前月末が30日だったら確かに「3で割り切れる日に嘘をつく幼女C」は嘘をつける––が、同時に「2で割り切れる日に嘘をつく幼女A」も嘘をついていることになる

幼女Aは「パーティー2日前」の「月末」に真実を語っている。

これは明らかに矛盾だ!

つまりパーティーの前日である「1日前」が月末というそもそもの仮定が間違っている。

以上により示される可能性はただひとつ。

パーティー当日が「月初」である。

よくここまで読んだな。

あと少しだ。

ラストリープ

A:真→真→?
B:真→真→真
C:→真→真

「2日前」「1日前」「当日」
がそれぞれ
「月末-1」「月末」「月初」
だと分かった。

「月末」の各幼女の発言を見てほしい。

「月末」の日は、誰も嘘をついていない。

つまり、「月末」は2で割り切れる日ではない。

ということは、「月末-1」は2で割り切れる日だ。

さらにいうと、「月末-1」は3で割り切れる日ではない。

もし「月末-1」が2でも3でも割り切れてしまうと、「月末-1」の日に嘘をつく幼女が2人出てきてしまうからだ。

実際には「月末-1」で嘘をついているのは幼女Cの1人のみ。

頭がパンクしそうなのでまとめよう。

  • 「月末」は奇数
  • 「月末-1」は偶数
  • 「月末-1」は3で割り切れない

「月末」といえば31,30,28などが候補に上がる。

だが、この候補の中に「月末」の条件を満たすものはない。

何か見落としがあるのだろうか?

……あった。

29日だ。

その日が月末なら、すべての条件をパーフェクトに満たす。

そして、暦の中で月末が29日になるのはうるう年の2月のみ。

つまりこの3日間の正体は
「2月28日」
「2月29日」
「3月1日」

さて、全ての月日が分かったので幼女たちの発言の真相が判明する。

2日前→1日前→当日
A:真→真→?
B:真→真→真
C:→真→真

「パーティー当日」は「3月1日」。
2で割り切れず、3でも割り切れない日だ。
つまり、この日すべての幼女は真実を語らねばならない。

これまでずっと欠けていたピースが最後の最後で埋まった。

幼女Aの「パーティー当日」の発言は真実だ。

これまでのまとめ

2日前:
A「Bは出席する」:真
B「Cは欠席する」:真
C「私が行く時のみAも行く」:嘘

1日前:
A「私が行かない時のみCは行く」:真
B「出席するのは偶数人数」:真
C「Aは出席する」:真

当日:
A「まだ2018年ではない」:真
B「私が行く時のみAも行く」:真
C「少なくとも1人は欠席する」:真

判明した事実:
・少なくとも1人がパーティーに行かない
・出席者は偶数人数
・Bは出席する
・Aは出席する
・Cは欠席する
・まだ2018年ではない

まだ2018年ではない。

そして問題が発表されたのは2015年。

その時点から見て将来にパーティーは開催される。

うるう年の西暦年数は4で割り切れる。

2015年から2018年の間でうるう年なのは2016年のみ。

ついに我々は手に入れた。

勝利の答えを。

(2)パーティーが開催されるのは2016年3月1日

まとめ

答えや解説を見ずに回答にたどりついた人間がいたら、そいつは間違いなく優秀だ。
下記リンクから新しいジョブを探すといい。

解説を全部読んで理解した人間がいたら––そいつもきっと優秀だ。
多くの人間が途中で諦める長文を少しずつ読解しながら自分の頭で整理しようとする根性を持っている。
意思と能力を兼ね備えた、スマートな存在だ。

ここまで読んでくれてありがとう。

キミはついに、この問題に打ち勝ったのだ!

参考

August 2015 Puzzle Periodical

NSA(アメリカ国家安全保障局)公式サイトだ。

超弩級の論理クイズがいくつも載っている。

自信のあるやつは「Careers & Programs」でNSA職に応募してみるといいだろう。

ただし自己責任で頼むぜ。

140字以内+140字以内の問題文

パーティーに幼女3人が招待された

2日前
A:Bは出席する
B:Cは欠席する
C:私が行くならAも行く

1日前
A:私が欠席ならCは出席
B:出席は偶数人
C:Aは出席する

当日:
A:まだ2018年ではない
B:私が出席ならAも出席
C:最低1人は欠席

 

幼女の内訳
・絶対に嘘をつかない幼女
・今日が2で割り切れる日のみ嘘をつく幼女
・今日が3で割り切れる日のみ嘘をつく幼女

(1) パーティーに出席する幼女は?
(2) パーティーの日程が将来だとすると、開催は何年何月何日?

※問題文発表は2015年8月18日