中島 聡 マイクロソフトでWindows95、Windows98、Internet Explorer 3.0/4.0のチーフアーキテクトなどを務めた。現在シアトル在住。「エンジニアのための経営学講座」を中心としたゼミ形式のメルマガ『週刊 Life is beautiful』では世界に通用するエンジニアになるためのノウハウを分かりやすく解説。 | あれは本当に素晴らしい問題です。良いソフトウェア・エンジニアになる上で一番重要なのは、知識や経験ではなく、この手の問題を筋道立てて解くことの出来る頭脳です。私も、Microsoft で面接官をしている時には、この手の問題をホワイトボードの前で説明しながら解いてもらいました。 問題を繰り返すと、 Albert と Bernard は Cherry と友達になり、Cherry の誕生日を知りたがりました。Cherry は誕生日の候補として、以下の10日をヒントとして与えました。 5月15日、5月16日、5月19日 6月17日、6月18日 7月14日、7月16日 8月14日、8月15日、8月17日 そして、Cherry は、Albert には生まれた月を、Bernard には生まれた日だけを教えました。 すると Albert が「Cherryの誕生日は僕には分からないけれど、Bernardにも分からないことを僕は知ってる」と言いました。 すると Bernard が「最初は僕もわからなかったけれど、今、分かったよ」と言いました。 すると Albert が「じゃあ、僕にもわかった」と言いました。 Cherry の誕生日はいつでしょう。 となりますが、この手の問題を解く時に一番大切なことは「問題を出来るだけ細かな小問題に分割して、一つずつ丁寧に解いて行くこと」です。 この場合、まず Albert が、「Cherryの誕生日は僕には分からないけれど、Bernardにも分からないことを僕は知ってる」と言った部分に注目して、この言葉からどんな情報が得られるのか考えてみます。 Albert は生まれた月しか教えてもらっていないので、誕生日が分からないのは当然です。しかし、「Bernard にも分からないことを僕は知っている」とはどういう意味でしょう? Bernard は日付しかもらっていませんが、(5月にしかない)19日や(6月にしかない)18日であれば、誕生日を知ることができてしまいます。つまり、Albert が「Bernard にも分からないことを僕は知っている」と断定できたということは、Albert が知っている生まれ月は5月でも6月でもない、つまり7月か8月であることが分かります。 これを聞いた Bernerd が「最初は僕もわからなかったけれど、今、分かったよ」と言えたのは、月が7月と8月に絞られたからなのです。Bernerd がその条件で、誕生日を知ることが出来るのは、(7月にしかない)16日と(8月にしかない)15日、17日の場合のみです。両方の月にある14日では、断定は出来ません。 さらにその情報を得た Albert が「じゃあ、僕にもわかった」と言ったということは、Albert が持っている生まれ月の情報だけから日付を知ることが出来た、ということなので、(16日という選択肢しかない)7月だということが分かるのです(つまり答えは7月16日です)。 |
0 件のコメント:
コメントを投稿