わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

レポート課題〜方眼探索問題

いきなりですが問題です.

次の図は,3行4列のマス目において,左上をスタート,右下をゴールとして上下左右に移動し,それぞれのマスをちょうど1回ずつ通るルートのひとつです.

↓→→↓
↓↑↓←
→↑→*

正整数n,mを入力として,n行m列のマス目に対してこのようなルートをすべて出力するプログラムを作りなさい.

さっそくですがRubyスクリプトです.
1年後期のプログラミング科目,冬休みのレポート課題では,こちらで用意した約150行のCのソースファイルを打ち込んで実行し,小問を解いてもらいました.
レポート提出ボックスは事務に依頼し,期限の翌日に答案をいただいてから,速報版となる解答・解説を授業Webページにて公開しました.
この問題(方眼探索問題)には,解の条件にバリエーションがあります.

  • 各マスをちょうど1回ずつ通るルートを求める.
  • 最短路を求める.
  • 各マスをたかだか1回ずつ通るルートを求める.

上下左右に移動すること,左上と右下をそれぞれスタートとゴールにすることは,いずれも共通とします.
このうち,「ちょうど1回」が,今回のレポート課題でした.「最短路」は,組み合わせの問題として,小中高でよく目にかかるものと同じタイプになります.
「たかだか1回」としているのは,次の動画です.

上でリンクしたRubyスクリプトは,コマンドラインオプションにより,3種類いずれも解けるようになっています.動画の「5×5」の解(同じところを2度通らない道順の数)に対応する実行コマンドは,ruby grid-explorer.rb -b2 -s6です.
学生向けのC版から,趣味のRuby版を作る際に,出力時の文字セットも選べるようにしました.C版は,英字のみでした.冒頭のルートなら,次のようになります.

DRRD
DUDL
RUR*

上下左右を「U(p) D(own) L(eft) R(ight)」の頭文字で表します.Ruby版では,これをデフォルトとし,「^ v < >」で向きを表すものや,漢字の「上 下 左 右」,そして最も視覚的な「↑ ↓ ← →」を指定することができます.
今回のレポート課題では,学生番号に応じた解番号の書き出しのほか,プログラム読解の小問のあと,マス目が16×16だと,出力はどうなるかを問いました.
答えは「何も出力しない」です.「ちょうどたかだか1回」の問題では行数・列数ともに偶数のとき,解なしとなります.市松模様を使って理由が説明でき,解説に記載しています.
「走らせ終了を待つまでに,あるいは走らせるより前に,結果がどうなるかを考えること」を習慣とし,今後のプログラミングに役立ててくれるといいのですが.