結城浩
2004年2月16日
「私は、すぐ行かなくてはなりませんわ。次の問題を出しておきますね」
「え?」
「コンピュータをやっている方でしたら、 ビット数がちょっと増えただけで、とても大きな数が表現できることはご存知ですね。 8ビットで256通り, 10ビットで1024通り, 16ビットで65536通り, 32ビットになったら…」
彼女が言葉を切ったので、私はあわてて「42億だったかな」と答える。
「そう、42億9496万7296通りのものを表現できます。 2のn乗は、プログラマにとってはfamiliarな「切りの良い」数ですね。 ここからが問題です」
彼女は突然、英語で歌を歌いだした。美しいソプラノだ。
As I was going to St. Ives (セント・アイヴズへ行く道すがら) I met a man with seven wives, (7人の奥さんを連れた男に会った) Each wife had seven sacks, (奥さんはそれぞれ7つの袋を持ち) Each sack had seven cats, (袋にはそれぞれ7匹の猫がいて) Each cat had seven kits: (猫にはそれぞれ7匹の子猫がいた) Kits, cats, sacks, and wives, (子猫と猫と袋と奥さん) How many were there going to St. Ives? (セント・アイヴズへ行ったのは全部でどれだけ?)
歌い終わると彼女は私の答えを待たず、 すぐに姿を消してしまった。
私はそれほど暗算に強いわけではないけれど、 このぐらいなら何とか計算できる。
きっと、あなたも。
先日の女の子からのクイズ(これは有名な英語の歌ですね)の解答を書いておきますね。
解答は以下です:(マウスまたは CTRL+A で範囲選択などして色を変えてご覧ください)
7人の奥さんがいて、奥さんは7つの袋を持ち、袋には7匹の猫がいて、猫には7匹の子猫がいるので、 全部で7×7×7×7=2401となります。 ずいぶんたくさんになるものですねえ。
ちょっと待った。2401というのは子猫の数ですねえ。 子猫と猫と袋と奥さんを全部あわせると、 7×7×7×7 + 7×7×7 + 7×7 + 7 = 2401 + 343 + 49 + 7 = 2800 となります。
でも、実は、このような計算をする必要はありません。
歌をよく読みますと、 子猫と猫と袋と奥さんはセント・アイヴズへ向かっているとは書かれていない。 セント・アイヴズへ向かっているのは私一人であることがわかりますね(!)。
ただ、この問題には若干あいまいな点があります。 さらによく歌を読みますと、 「子猫と猫と袋と奥さん」 と限定して尋ねているようにも解釈することができます。 この場合には、セント・アイヴズへ行ったのはゼロということになります。
昨日から今日にかけて、解答を送ってくださった方は12人いらっしゃいました。 ちなみに、その中で一人またはゼロと答えた正解者は7人でした。 多数の解答をありがとうございます。