Problem:
ヒットアンドブロー

太郎君と花子さんはヒットアンドブローで遊ぶことにしました。ヒットアンドブローのルールは、以下の通りです。

出題者と回答者に分かれて行う。

出題者は、重複した数を含まない 4 桁の数字(正解)を決める。

回答者は、その 4 桁の数字(回答)を言い当てる。

回答に対して、出題者はヒットとブローの数でヒントを与える。

回答と正解を比べて、数と桁位置の両方が同じであることをヒットと呼び、数だけが同じで桁位置が異なることをブローと呼ぶ。たとえば、正解が 1234 で、回答が 1354 なら、出題者は「2 ヒット、1 ブロー」というヒントを与え、正解までこれを繰り返す。

出題者と回答者は交代してゲームを行い、より少ない回答で正解を言い当てた方を勝ちとする。

太郎君と花子さんは、ヒットの数とブローの数をその都度判断することが少し面倒に感じているようです。そんな二人のために、ヒットの数とブローの数が即座に分かるプログラムを作成してあげましょう。

正解 r と回答 a を入力とし、ヒットの数とブローの数を出力するプログラムを作成してください。r、a はそれぞれ 0 から 9 の数字 4 つからなる数字の列です。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロふたつの行で示されます。各データセットとして、r と a が空白区切りで１行に与えられます。

データセットの数は 12000 を超えません。

Output

入力データセットごとに、ヒットの数とブローの数を１行に出力します。

Sample Input

1234 5678
1234 1354
1234 1234
1230 1023
0123 1234
0 0

Output for the Sample Input

0 0
2 1
4 0
1 3
0 3

Solution in C# (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test1 {

    class ClassMain {
        public static void Main(String[] args) {
            //Console.WriteLine("Hello World!");
            while (true) {
                String[] strs = Console.ReadLine().Split(' ');
                if (strs[0] == "0") { break; }
                char[] charsA = strs[0].ToCharArray();
                char[] charsB = strs[1].ToCharArray();
                Console.WriteLine(hit(charsA, charsB) + " " + blow(charsA, charsB));

            }
        }

       static int blow(char[] charsA, char[] charsB) {
            int blowCount = 0;
            for (int i = 0; i < 4; i++) {
                char a = charsA[i];
                for (int j = 0; j < 4; j++) {
                    char b = charsB[j];
                    if (a == b && i != j) {
                        blowCount++;
                    }
                }
            }

            return blowCount;
        }

        static int hit(char[] charsA, char[] charsB) {
            int hitCount = 0;
            for (int i = 0; i < 4; i++) {
                if (charsA[i] == charsB[i]) { hitCount++; }
            }
            return hitCount;
        }

    }


}