あけましておめでとうございます
映画「ザ・ホリディ」は今年一番のデート・ムービー

ビルゲイツの面接試験―ドラゴン桜編、解答

 大晦日に出題した「ビルゲイツの面接試験―ドラゴン桜編」。「4つ」という典型的な誤答から、「8つ(図付き)」という正解まで寄せられた。

 やみくもに探しても注意深い人であれば8つ全部を見つけることは可能かもしれないが、そんな解き方は再現性・信頼性の意味でもあまり好ましくない。ソフトウェア・エンジニアとしては、やみくもに探すのではなく、きちんと筋道立てて考えて、抜かりなくすべてのケースを見つけ出すように考える習慣を身につけて欲しい。

 そこで、私が解いた手順を参考までに下に示す。

 まず、円と円との接し方には外接と内接があることに着目する。すると、平面上に二つの円があるのだから、それぞれに外接・内接をする組み合わせを考えれば、「外接・外接」「内接・外接」「外接・内接」「内接・内接」の4通りがあることが分かる。

 そこでまず、ひとまず直線のことは無視して、両方の円に外接する円にはどんなものがあるかを考えてみると、下の図のようになる。

Dragon_base

 灰色の円が、両方の円に接する円の中で一番小さいもの。両方の円に接したままで半径を大きくした円をいくつか赤で表示してみたが、実際には連続した大きさで無限個の円が存在する。注目すべき点は、画面の右下と左上に二つの円のグループが存在すること。

 これらの円の中で、さらに直線とも接する円を探すために、直線を再び描き入れてみると、右下・左上のグループにそれぞれ一個づつそんな円が存在することが分かる(下図の太線で描かれた円)。

Dragon_000

 これと同じことを、「内接・外接」、「外接・内接」、「内接・内接」の場合それぞれについて行うと、下図のようになる。

Dragon_10Dragon_01Dragon_11

 つまり、4通りの接し方それぞれに2つの円のグループがあり、各グループに直線と接する円が一つづつ存在するので、「トータルで8つの円が描ける」、というのが正解である。こんな解き方をすれば見逃す心配もないし、ちゃんと「8個が最大である」ことも証明できる(最初の二つの円の配置と大きさによっては、8個未満の場合もあるがそれに関してはここでは省略。余裕のある人は、応用問題として「どんな場合に答えが8個より小さくなるか」を考えてみると良い)。

 ちなみに、出題の際にも述べたが、この手の問題はこの世の中には数え切れないほど存在するし、新しい問題は次々に作られてくるし生じてもくるので、それぞれの問題の解き方を丸暗記して知識として蓄えようとしても決して追いつかない。そんな「知識の習得」よりも、どんな新しい問題に出会ったときにも自分なりに筋道立った解き方を見つけ出すことが出来る「力」と、常に筋道を立てて考えようとする「習慣」を持つ方が何倍も大切で、それこそがソフトウェア・エンジニアにもっとも要求される素養である。

【このブログに初めて来た人へ】
 この問題の他にも、「ビルゲイツの面接試験シリーズ」として過去に色々な問題を出題している。下にリンクを張っておくので、ぜひとも楽しんでいただきたい。

クイズ編(金貨問題) → 模範解答 → 追記問題の解答
ミネラルウォーターの謎 → 解答 → 追記問題の解答
亀の子算 → 解答
株取引編 → 解答

Comments

Verify your Comment

Previewing your Comment

This is only a preview. Your comment has not yet been posted.

Working...
Your comment could not be posted. Error type:
Your comment has been posted. Post another comment

The letters and numbers you entered did not match the image. Please try again.

As a final step before posting your comment, enter the letters and numbers you see in the image below. This prevents automated programs from posting comments.

Having trouble reading this image? View an alternate.

Working...

Post a comment

Your Information

(Name is required. Email address will not be displayed with the comment.)