本連載ではアルゴリズムを学ぶ、または学び直すことで、プログラミングのスキルを深めていきます。アルゴリズムは学問として取り扱われることが多いですが、この連載では開発の現場に役立つスキルを身に付けることを目的とします。初回は、アルゴリズムを学ぶ意義について。コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう。
IT技術者である読者の皆さんなら、普段から何げなく「アルゴリズム」という言葉はよく使っていることでしょう。しかしあらためて「『アルゴリズム』とは何か」と問われて、すぐに明快に答えられるでしょうか。
また、IT技術者であってもアルゴリズムをきちんと勉強した人は意外と多くないのではないでしょうか。大学で学んだとか、入社後の新人研修で学んだという人もいるかもしれません。それでもしばらく開発の現場に出ているうちに忘れてしまった、という人もいることでしょう。
この連載ではアルゴリズムを学ぶ、または学び直すことで、プログラミングのスキルを深めていきます。アルゴリズムは学問として取り扱われることが多いですが、この連載では開発の現場に役立つスキルを身に付けることを目的とします。「アルゴリズムなんていまさら勉強する意味がない」と思った方。ひとまずこの第1回目を読んでみてください。
いま人気のお笑い芸人に、世界のナベアツがいます。1から40までの数を数えていくのですが、3の倍数と3の付く数字のときだけアホになります。これをコンピュータ上で実現するにはどうしたらよいでしょうか。
1から40までループするとして、「3の倍数」は、剰余を使って余りが0という条件で判定できそうです。「3の付く数字」はどうしたら判定できるでしょう。
こういう場合、われわれ人間が3の付く数字をどのように認識しているのかを考えて、それと同じことをコンピュータにやらせるとうまくいくことがあります。人間は、見た目で3があれば3の付く数字だと認識します。できるだけ同じことをコンピュータで行うには、数字を文字列に変換して、その文字列に3が含まれるかどうか、という条件で判定できそうです。
こういったコンピュータでの課題の解決の手順が、アルゴリズムなのです。
せっかくなので実装してみましょう。思い付いたアルゴリズムも実際に実装してみると問題がある場合がよくあります。なお、本連載では主にJavaScriptでサンプルプログラムを紹介します。特別なソフトのインストールをしなくともWebブラウザ上で実行できるためです。
では、下記に実装したプログラムを示します。アホにする部分は「F.Ko-Jiの『一秒後は未来』」で公開されていたスクリプトを利用させていただきました。
関連リンク: | |
---|---|
ページ中の3の倍数と3の付く数字をアホにするブックマークレット ― F.Ko-Jiの「一秒後は未来」 http://blog.fkoji.com/2008/04210855.html |
|
<html> <head> <script type="text/javascript" src="//www.atmarkit.co.jp/fcoding/articles/algorithm/01/nabeatsu.js" charset="UTF-8"> </script> <script type="text/javascript"> var count = 1; function nabe() { document.getElementById("num").innerHTML = count; if ((count % 3) == 0) { henkan(); } if (String(count).indexOf("3") > -1) { henkan(); } count++; if (count <= 40) { setTimeout("nabe()", 1000); } } </script> </head> <body onLoad="nabe()"> <div id="num" style="font-size:80px;"></div> </body> </html>
コピー&ペーストはしないでぜひ1文字ずつタイプすることをお勧めします。1文字ずつタイプするのは面倒ですが、理解度が違います。プログラムを理解するための作業だと思って、タイプしてみてください。
エディタにプログラムを打ち終えたらnabeatsu.htmlなど任意のファイル名で保存してください。拡張子は「.html」としてください。保存したファイルをWebブラウザにドラッグ&ドロップなどして開くと、実行が始まります。
Internet Explorerの場合、スクリプト実行の警告が出ることがありますが、その場合は上部のツールバーをクリックして実行を許可してください。
Copyright © ITmedia, Inc. All Rights Reserved.