CodeIQ過去問集24:ヒット・アンド・ブロー
本稿はCodeIQで2014年9月15日~12月1日に出題された コード銀行:ヒット・アンド・ブロー という問題を再編集したものです。 ※出題時と記述が一部異なる場合がありますがご了承ください。
ヒット・アンド・ブロー
ヒット・アンド・ブローというゲームがあります。 出題者は、0000~9999の、4桁の数字の中から、秘密の答えを選びます。 解答者は、出題者が選んだ秘密の答えを予想し、答えます。 秘密の答えに対し、予想の答えがどのくらい正しいかを、出題者は解答者に次のヒントを与えます。
[1]数字と、数字の場所(桁)が共に合っている場合はヒット
[2]数字は合っているが、数字の場所が合っていない場合はブロー
たとえば、秘密の答えが1300で、解答者が1234と答えた場合、
1300 1234
最初の桁は完全に一致していますので1ヒット(ヒットの場合はブローのカウントを行いません)、次の桁は一致していませんが、その次の桁に3がありますので、'3'という数が含まれているということで1ブロー、つまりこの場合は、1ヒット・1ブローとなります。
また、同じ数が複数ある場合、たとえば秘密の答えが0111、予想の答えが1000と答えた場合、「1」は1ブロー、「0」も1ブローと考え、全体で2ブローとします。
秘密の答えと予想の答えがピッタリ同じになった場合は、4ヒットと答えることになります。
【問題】
秘密の答えと予想の答えが与えられたとき、適切にヒット・ブローのヒントを出すプログラムを書いてください。
【入力】
テキストファイルに、次の書式でデータが書かれています。
1行目に、データの件数Nが書かれています。整数値(1≦N≦100)
2行目以降のN行に、秘密の答えと予想の答えが、半角スペース区切りで書かれています
入力例
3 1300 1234 0004 1234 1234 1230
【出力】
秘密の答え・予想の答えのセット毎に、改行区切りでヒントを出力してください。ヒットの場合は'H'、ブローの場合は'B'としてください。ヒット・ブローがない場合でも、'0H'や'0B'のように出力してください。また、出力順はヒットを先にしてください。つまり、'mHnB'のような形でということです。
出力例
1H1B 1H0B 3H0B
【解答方法】
hit_and_blow.zipをダウンロードしてください。 中には以下のファイルが含まれています。
- sample.in.txt, sample.out.txt
例で示したデータと、その解答です。
- testdata.in.txt
これを入力として、正しい実行結果が得られるプログラムを書いてください。
(解答・解説は後日)