カメヲラボ

主にプログラミングとお勉強全般について書いてます

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

これを入力として、正しい実行結果が得られるプログラムを書いてください。

(解答・解説は後日)