1から10までの数字を思い浮かべる

心が読めるという友人に、「1から10までの数字を思い浮かべ、それを9倍し、その数字の和(例:23 -> 2 + 3 = 5)、和から5を引く」という手品をされたことがあるのではないだろうか? このとき、4という値になっているかもしれません。 どうしてそれがわかるのでしょうか? お友達と同じ手を使います。 Clojureを使ってお見せしましょう。 まず、数字の桁を合計する関数を書きます:

(defn sum-digits (apply + (map #(Integer. (str %)) (str val))))

値は文字列に変換され、map関数が各桁の文字を整数のリストに変換し、apply関数が整数のリストを合計し、合計を関数 sum-digitsの呼び出し側に返します。 この関数を使ってトリックの計算を構成していきます:

(defn puzzle (- (sum-digits (* x 9)) 5))

puzzleという関数は、友人に頼まれた順番で計算を実行します。 まず、考えた数字に9をかけ、次に結果の数字を合計し、最後に合計から5を引きます。次に、トリックを明らかにするために別の関数を書きます。 関数mapはリストの各数値に関数puzzleを適用し、その結果を含む別のリストを生成します。 さて、関数unveilを実行して結果を見てみましょう:

(unveil)(4 4 4 4 4 4 4 4 4 4)

Oh, look! 1から10までの範囲では、結果は常に4となります。 つまり、パターンである。 乗算にはパターンが非常に多く、それをすべて取り除くと素数になることは、マーク・ハドンが著書「夜の犬の珍事件」の中で指摘している通りです。 ダニエル・タメットは、著書「Thinking in Numbers」の中で、いくつかのパターンを例示している。 ダニエル・タメットの著書『Thinking in Numbers: How Maths Illuminates Our Lives』では、いくつかのパターンが例示されている。 偶数に5を掛けると必ず0で終わる数字が得られ(例:12×5=60)、奇数で行うと必ず5で終わる数字が得られる。 9の場合、9に1から10までの数字を掛けてその桁を合計すると必ず9になる。

一連の流れの中で、9から5を引くと乗法のパターンから注意がそれるばかりでトリックは改善さえされてしまうのである。 例:アルファベットの各文字に対応する数字があるとします(A – 1, B – 2, C – 3, …)。 次に、結果(4)を取ってそれぞれの文字を出し、この文字で始まる国を考え、その国の4番目の文字を取り、この文字で始まる動物を考える。 最終的な答えは、高い確率で「デンマーク」と「サル」になるでしょう。

まず、アルファベットの4文字目である「D」で始まる国はそう多くありません。 デンマーク、ジブチ、ドミニカ、ドミニカ共和国などの中で、デンマークはすぐに思い出せると思います。 デンマークの4文字目は「M」ですが、「M」で始まる動物で猿ほど有名なものはなく、すぐに頭に浮かびます。

Clojureでプログラミングするのが楽しいのは、Clojureが学ぶのも教えるのも楽しいからだけではなく、プログラミングはいつも真剣勝負というわけではないので、楽しいのです。 物事を実現するのに十分なコードをプログラミングできることは、構造、パターン、慣習、スタイルよりも、思考、問題解決、創造性を刺激します。 コーディングはストレスのたまるものではなく、リラックスできるものであるはずです。 楽しんでください!

コメントを残す

メールアドレスが公開されることはありません。