みなさん、迷路を作るアルゴリズムの一つ「棒倒し法」はご存知か?
子供のころ、鉛筆を持ってぐりんぐりん線を引っ張って迷路を描いて遊んだことがあります。理屈なんて関係なくただただ描いていました。あれはアルゴリズム的には「壁伸ばし法」かな。。と思います。
いくつか、迷路を描くためのアルゴリズムはあるのですが、つくば高等学院でプログラミングに慣れてきた生徒には、取り組んでもらう課題の一つとして「棒倒し法」をよく使っています。
迷路を作るアルゴリズムの棒倒し法とは
細かいことは抜き、超簡単に説明しますと。
これは迷路の元になるフロアマップで、青いところを柱と考えます。(ビルじゃないよw)
そしてこの柱を重ならないようにランダムに倒していくと、迷路が簡単にできちゃうよという優れたアルゴリズムなのです。
だいたい、こんな感じです。
SとGは私がてきとうに入れたスタートとゴールです。
手動でやる分には簡単ですよね。
想像をカタチにする力
人間は直感的に重なるか重ならないかを判断して、空いている方向に瞬時に柱を倒すことができます。
しかし、それをコンピュータにやらせるのは大変なんです。
理屈がわかっても、最初から簡単にプログラミングできる人は少ないです。
テレビで活躍するような天才がすごい派手なゲームをサクサクと作ったりしていますが、天才である必要はありません。
努力してできるようになってもいいじゃないですか。中高生ならまだまだ時間はあります。どこかで気が付くと思うんですが、天才的にプログラムが書けることより、自分が思った通りに必要なものを作れる能力こそが重要です。
どうしたらそんな力が付くかというと、想像をカタチにする力をみにつけることです。それには、トレーニングが必要です。楽しくないと続かないからゲームを作ったり、身近なことに絡めてチャレンジしていくんです。棒倒し法もつくば高等学院ではそんなトレーニングの一つ。
棒倒し法は初心者には結構高いハードルです。
上の画像は1年生の作品。よく頑張りました。すでに改造してあるので、一般的な棒倒し法のプログラムとはちょっと違っていて結果も違いますが、ここまで自力でやるというのは素晴らしいです。
つくば高等学院の生徒がやらなければいけないことは能力を高めること。プログラムを早く作り上げることではありません。想像したことを問題ととらえ、その問題を解決するための手順を言葉に置き換え、それをプログラミング言語に置き換える能力。つまり、考えたこと、想像したことを具現化する能力を高めることです。
ぜひ、プログラミングで行き詰まったり、もっと力を付けたいなと思う人はアルゴリズムに挑戦してみてください。ネットで検索したり、書籍を探すと問題集がたくさんあります。