「コンピュータは習うより慣れろ」という.つまり,コンピュータの使い方は,学校の授業のように順序立てて教わるものではなくて,リクツは分からなくても,遊んでいるうちにリクツは分かってくるという話である.
ただし,遊び方が問題である.誰もが興味をもつようなテーマであって,将来コンピュータの学習に役立つものでなければならない.
ここに,数のゲームに関した面白い問題がある.
[3x+1問題]
整数Nが偶数ならば,2で割る.
奇数ならば,3倍して1を加える.
このことを繰り返すと,いつかは必ず1になる.
「Collatzの問題」とも呼ばれるこの問題は,1969年頃から大きな話題になっている.
じつは,この問題は未解決なのである.証明はない.
一方で,多くの人がコンピュータを使って確かめたが,反例はまだ見つかっていない.
1970年の段階で6千万までの数について成り立つことが確かめられた.その後記録はどんどん書き換えられているが,反例が出たという報告はない.
もし反例が見つかったら,これは大ニュースで24時間以内に世界中に報道されること間違いない.
偶数は2で割るから必ず小さくなるが,奇数は大きくなるから「いつかは必ず1になる」といわれてもにわかに信じがたい不思議な結論である.
われわれはこの問題が正しいと信じて,コンピュータで確かめてみよう.
多くのコンピュータにあるソフトExcelを開き,
セルA3に,
=IF(OR(A2=1,A2=""),"",IF(MOD(A2,2)=0,A2/2,3*A2+1))
と入力する.
(作業画面1)
この式は複雑だが間違いなく入力してください.
この式の入力が第1の作業である.
第2の作業は,セルA3を発生源として,次の領域(A列〜Z列,3行〜120行)をオートフィルで埋めることである.
この作業の詳しい説明はここをクリックしてください.
上の作業を終えた後,第2行目に好きな自然数を入力すると,とたんに画面が激しく変わる.
次の画面は,セルA2〜D2に,それぞれ,初期値7,77,777,7777を入力したときの例である.第3行以下は自動的に現れた数値である.
(作業画面2)
この画面を見ると,各列について,
奇数は3倍して1を加える
偶数は2で割る
最後は必ず1となる
のが見て取れる.
777,7777をトップとする列は,1に達していないので画面を巻き上げて見るとよい.
この画面からさらに他の数値を7777の右に付け加えてもよいし,7, 77, 777, 7777 を他の数で置き換えてもよい.
ゲームの規則からしたがうと,1の次は4となり,以下,4,2,1,4,4,2,1,…と繰り返すことになるが,この画面では1が出たらそこで数列をうち切るようにしてある.
さらに,オプションとして,「ある初期値に対し,何手目に1となるか」を出力させよう.
このために,セルA1に,
=match(1,A2:A200,0)
と入力する.
さらに,B1〜Z1をオートフィルで埋める.この作業の詳しい説明はここをクリックしてください.
次の画面はこの作業シートの適用例である.奇数1,3,5,…を初期値とするゲームの手数が各列のトップに表示されている.
奇数列の入力法については,ここをクリックしてください.
(作業画面3)
このコラムにおいて,筆者は,
いまどきのコンピュータはこのように使うものだ
という一例を示したつもりである.
このストーリーは,将来に発展する話題として,
エクセルの関数 IF,OR,MOD,MAFCH
エクセルの操作 オートフィル
プログラム言語
プログラミングの方法
などを含んでいる.
筆者は,在籍する大学においてコンピュータを教えているが,コンピュータ言語に関する話題はこういう身近なゲームから導入していきたいものである.
コンピュータ言語の学習というと,高校の教科書ではユークリッドの互除法(最大公約数の計算法)を取り上げているが,それよりもこの3x+1問題の方がわかりやすくて面白い.しかも未解決の問題であるという話題性もある.
学生と共にこのゲームを楽しみ,コンピュータの勉強に取り組んでほしいと考えている.学生たちは全員が文系の学生であるが,興味をもって発展的な話題に取り組んでくれるだろうと期待している.
|