化学や物理現象を利用した「サイエンスマジック」というものがあります。
米村でんじろうさんのサイエンスショーが有名ですよね。
化学や物理を学び、その原理がわかっている人からすれば、
「そりゃそうなるでしょ」ということも、その分野を学習していないもしくは
知らない人からすれば、「なんでそうなるの!?」とあたかもマジック
にみえてしまうものです。
この「サイエンスマジック」と同じように、「情報科学」「計算機科学」の原理を
利用して行う「プログラミングマジック」(私の造語です, CSマジックといった方が良いかもですが)というものもあります。
1つ例を示しましょう。
1)まず相手に白カード黒カードを自由に5×5に並べてもらいます。
2)そのあと、「より難しくするために一列追加しますね」といいながら
マジシャン役のあなたが縦と横1列カードを追加します。
3)そしてあなたは後ろを向き、あなたがみていない状況をつくり、相手に任意の1枚を
ひっくり返してもらいます。
4)そして、当てる
———————————————————–
とこれだけです。
「5×5の配置を覚えてるでしょ」と疑う方がいそうなら、7×7 9×9のように数を
増やして行っても良いでしょう。
鍵になるのは、(察しがついているかもしれませんが)、言い換えますと、
コンピュータサイエンス要素をいれているのは、ずばり2)の個所です。
さてさて、どのように縦横1列を加えるとよいでしょうか???
正解は、縦横の黒カード、白カードどちらでも良いですが、縦横のカード枚数合計が偶数枚になるようにおくことです。
相手がひっくり返す前は、縦横の白カード、黒カードはすべて偶数枚になっていますから、
カードをひっくり返した縦横は白カード、黒カードの合計が必ず奇数になるはずです。
その縦横が交わったところのカードが相手がひっくり返したカード、というわけです。
これは、IT用語で「バイナリチェック」と呼ばれるものを応用したマジックです。
デジタルデータはすべて「0」と「1」の2つの数値の羅列になっています。
この2進法の原理を用いて、ある人からある人へ送られたデータが
何らかの影響で変化したか・しなかったかが判明するように
「0」もしくは「1」の総数が奇数もしくは偶数となるようデータの末尾等に「0」「1」を加えることで
送信先と送信元でデータが違っていないかチェックするのです。
さきほどのマジックは白カードを「0」黒カードを「1」に見立てている、ということです。
他にも、こうしたコンピュータサイエンス使ったマジックはいくつもあります。
こどもはマジックが大好きですので、実はコンピュータサイエンスの知識が
隠されているとなれば、学習への”つかみ”として良いかもしれませんよ!