PR

 去る11月6日~7日に福島県の会津大学で開催された「パソコン甲子園2010」で、審査委員を務めてまいりました。予選を勝ち抜いて来た優秀な高校生プログラマたちが書いたプログラムを審査して、私は、嬉しくなりました。なぜなら、個性的な作品が多かったからです。

プログラミング部門のルール

 パソコン甲子園2010本選大会の競技は「プログラミング部門」「デジタルコンテンツ部門」「いちまいの絵CG部門(事前審査)」に分かれて行われました。ここでは、プログラミング部門のルールを説明しましょう。1チーム(2人)で1台のパソコンを使い、与えられた問題を解くプログラムを4時間の制限時間内に作成します。使用できるプログラミング言語は、C言語、C++、Javaのいずれかです。書籍や参考資料の持込は許可されていますが、デジタルデータ(USBメモリに入れたプログラムや資料など)の利用は禁止されています。

 問題は、全部で12問あり、難易度に応じて4点~15点の配点が割り当てられています。全問に正解すると100点になります。競技終了時点で得点の高い順に、グランプリ、準グランプリ、第3位を決めます。さらに、得点とは関係なく、プログラムの内容(ソースコードの書き方)を審査して、審査委員特別賞を決めます。審査委員特別賞の問題は、私が出題したものです。もう1人の審査委員である筧先生(早稲田大学教授、情報処理学会理事)と相談して、審査委員特別賞の受賞チームを決めました。

皆、同じような回答になってしまうのではないか

 審査委員特別賞の問題を以下に示します。4桁の数字を当てる「ヒット&ブロー」というゲームを題材にして、ヒットとブローの数を表示するプログラムを作ってもらいます。

【審査委員特別賞の問題】
「ヒット&ブロー」という2人用のゲームがあります。ルールは、以下の通りです。

・出題者と回答者に分かれて行う。
・出題者は、重複した数を含まない4桁の整数を決める。
・回答者は、その4桁の整数を言い当てる。
・回答者の言った答案に対して、出題者はヒットとブローの数でヒントを与える。
・答案と正解を比べて、数と桁位置の両方が同じであることをヒットと呼び、数だけが同じで桁位置が異なることをブローと呼ぶ。
 たとえば、正解が1234で、答案が1354なら、出題者は「2ヒット、1ブロー」というヒントを与える。
・出題者と回答者を交代してゲームを行い、より少ない回数で正解を言い当てた方を勝ちとする。

ヒット&ブローの一部分だけをプログラムにしてみましょう。
キーボードから正解と答案を入力すると、ヒットとブローの数を表示するプログラムを作成してください。
正解を言い当てるまでではなく、入力と出力を1回行うとプログラムが終了するようにしてください。

【実行例1】
入力	1234
	5678	
出力	Hit = 0, Blow = 0

【実行例2】
入力	1234
	1354
出力	Hit = 2, Blow = 1

【実行例3】
入力	1234
	1234
出力	Hit = 4, Blow = 0