わさっきhb

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

デバッグコンテスト

今月の情報処理学会の会誌「情報処理」で,プログラミングコンテストが取り上げられていました.
Short Coding ~職人達の技法~は,私が知る限り,オンラインジャッジについて触れた数少ない(もしかして初めて?)本です.処理系の特性を深く理解して,字数を減らそうという試みは,ちょっと大学では教えにくいですが,本道ではないことを承知した上で勉強するのはいいことだと思います.p.371の表の「明解に書こう!」は,ひそかなお気に入りです.
また,EPOCH@まつやまの競技ルールというのも知りました.予選で,プログラムの見易さが評価に含まれているのが,興味深いです.

研究室内で,プログラミングコンテストの問題を解くゼミをやってきましたが,コンテストそのものにプレイヤーとして,あるいは主催者an organizerとして参加するのは,自分の能力では難しいです.
そんなときにふと,「デバッグコンテスト」というのを構想しました.‹^–â‰ðŒˆ‚Ì•”‰®によると,β版(評価版)に関して『バグを見つけると賞金がもらえる"デバッグコンテスト"などが開かれる場合もある』そうですが,もちろん別物*1です.

妄想するデバッグコンテストの基本ルールは:

  • 参加者は,非テキストの形態*2で与えられたソースファイルをタイプします.
  • もとのソースファイルには,1個以上のバグが含まれています.修正して,公開または非公開のテストケースすべてに通れば,デバッグ完了です.

勝敗をつけることができます.修正箇所が少なければ少ないほど,良いデバッグ*3とみなします.もとのソースファイルをXとして,2人の学生が修正して作ったソースファイルをA,Bとしたとき,

  • 「XとAの異なる行数」と「XとBの異なる行数」を比較し,小さい方の勝ち.
  • 異なる行数が同じなら,「XとAの異なる字数」と「XとBの異なる字数」を比較し,小さい方の勝ち.
  • 異なる字数も同じなら,先に作成したほうが勝ち*4

こんなデバッグコンテストの効果ですが:

  • 簡単で,修正もほんの少しだけのプログラムを多数用意すれば,良いソースファイルを打ち込んで理解することにつながり,見ただけでどこにバグがあるかを見つける練習にもなります.将棋で,3手詰の詰将棋をたくさん解いて棋力を上げるのと似た教育効果です.
  • 一つの正しいプログラムを用意して,バグの位置を変えることで,バグ入りの問題を複数作ることができます.バグの位置によって難易度調整も可能です.反復練習*5に使えそうです.

*1:「べつもん」と読むように.

*2:紙.またはコピーできないように画面に表示.まあそれでもOCRソフトで一発変換されてしまうなあ….

*3:別のバグを埋め込む可能性が低い,という意味で.

*4:サーバに提出することにすれば,同時ということはないようにできるはず.

*5:小学生のドリルのように.あるいは英語などの受験勉強のように.