ある貴族が、6時間後に行われるパーティーで振る舞うべく、1000本のワインを用意した。ところが、あろうことかその1000本のうちの1本に「笑い薬」が混入していることが明らかになった。この笑い薬は非常に強力で、1滴でも飲めば丸1日は笑いが止まらないという代物であり、そんなものをパーティーの招待客に振る舞ったともなれば、貴族の面目が丸つぶれだ。
しかしながら、笑い薬は無色透明・無味無臭なため、見た目や香り、味で判断することはできない。さらに厄介なことに、薬の効果が表れるのは摂取したのち30分~3時間後とタイムラグがある。また、ワインを全て破棄して新たに1000本手に入れるということも時間的に不可能だ。仕方なしに、貴族は召使いにテスティングさせて薬入りのワインを判別することにした。
さて、このような条件下で6時間以内に確実に薬入りの1本を割り出そうとした時、最小で何人の召使いが必要だろうか? ただし、薬はどんなに薄めても効果が出るものとする。また、テイスティングにかかる時間は考慮しない。
今回の頭の体操はかなりの難問です! 「ある概念」を知っていれば、少し考えるのが楽にはなりますが……
以下はヒントです(反転して読んでください)
ヒント①:必要人数は、1000人どころか500人よりもはるかに少ない人数で判別可能です
ヒント②:2進数
それでは正解発表です!
薬入りかどうかは最大3時間待たないと分からないので、6時間後のパーティーまでには1人2本分をテイスティングできるから、1000÷2=500人……ではありません。
ヒントにも書いた通り、必要人数は500人よりもはるかに少なく済みます。
ズバリ、その人数とは……10人です。
「たった10人!?」と思うかもしれませんが、本当にたったの10人で1000本のワインから薬入りの1本を判別することが可能なのです。ポイントは、以下の2点。
・1人の召使は、1本のワインに対して「飲む/飲まない」の2通りの選択肢がある
・それが10人分あれば、210=1024通りを表すことができる
……と、さすがにこれだけでは分かりにくいとは思うので、具体的な手順を説明していきます。
①ワインに1~1000の通し番号を振り、10人の召使いにそれぞれ「1、2、4、8、16、32、64、128、256、512」の数字を割り振る
②1番のワインを飲むのは「1」の召使い、2番のワインを飲むのは「2」の召使い、3番のワインを飲むのは「1」と「2」の召使い……10番のワインを飲むのは「8」と「2」の召使い……85番のワインを飲むのは「64」と「16」と「4」と「1」の召使い……765番のワインを飲むのは「512」と「128」と「64」と「32」と「16」と「8」と「4」と「1」の召使い……1000番のワインを飲むのは「512」と「256」と「128」と「64」と「32」と「8」の召使い……といった具合で、「ワインの番号=召使いに割り振られた数字の和」になるようにワインをテイスティングさせる
③3時間待って、笑い出した召使いに割り振られた数字を全て足し合わせる。それが、薬入りワインの番号である
さて、やってもらえば分かると思いますが、「1、2、4、8、16、32、64、128、256、512」の10個の数字があれば、それらを組み合わせて足し算することによって、1023以下の自然数ならどれでも作ることができます。これを利用することにより、1000分の1のワインを10人で判別することが可能になるのです。
実はこの解法は、2進数の考え方に基づいています。2進数が何かということは……ここで説明すると長くなってしまうので、気になった方はぜひ調べてみてください(笑)
(出典:https://sist8.com/1000j)