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

Submitted solutions:

code_snippet: // 2021/12/07 Tazoe

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
	while(true){
		char r[5], a[5];
		cin >> r >> a;

		if(strcmp(r,"0")==0 && strcmp(a,"0")==0)
			break;

		int h = 0, b = 0;

		for(int i=0; i<4; i++){
			for(int j=0; j<4; j++){
				if(r[i]==a[j]){
					if(i==j){
						h++;
					}
					else{
						b++;
					}
				}
			}
		}

		cout << h << ' ' << b << '\n';
	}

	return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 3088
final_rank: 10

code_snippet: #include <iostream>
#include <set>
#include <algorithm>
using namespace std;

int hit(string a, string r);
int blow(string a, string r);

int main(void){

  string a;
  string r;
  while(cin>>r>>a){
    if(r=="0" and a=="0"){
      return 0;
    }
    cout<<hit(a,r)<<" "<<blow(a,r)<<endl;
  }
}


int hit(string a, string r){
  int hit_count=0;
  for(int i=0;i<4;i++){
    if(a[i]==r[i]){
      hit_count++;
    }
  }
  return hit_count;
}
int blow(string a, string r){
  set<char> a_s,r_s,mul;
  for(int i=0;i<4;i++){
    a_s.insert(a[i]);
    r_s.insert(r[i]);
  }
  set_intersection(a_s.begin(),a_s.end(),r_s.begin(),r_s.end(),inserter(mul,mul.end()));
  return mul.size()-hit(a,r);
}
accuracy: 1
time_ms: 10
memory_kb: 3060
final_rank: 5

code_snippet: #include <iostream>
#include <string>
#include <algorithm>
#include <set>
using namespace std;


int main() {

    string a, b;
    int hit, blow;
    for (;;) {
        set<char> s;
        cin >> a >> b;
        if (a.size() == 1 && b.size() == 1) break;
        hit = blow = 0;
        for (int i = 0; i < 4; i++) s.insert(b[i]);
        for (int i = 0; i < 4; i++) {
            if (a[i] == b[i]) hit++;
            else if (s.find(a[i]) != s.end()) blow++;
        }
        cout << hit << " " << blow << endl;

    }

    return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 3072
final_rank: 6

code_snippet: #include<stdio.h>
#include<string.h>
#include<iostream>
#include<string>

using namespace std;

int main() 
{
	string r, a;
	cin >> r >> a;
	while (r.length() != 1)
	{
		int h = 0, b = 0;
		for (size_t i = 0; i < 4; i++)
		{
			for (size_t j = 0; j < 4; j++)
			{
				if (r[i] == a[j])
				{
					if (i == j)
						h++;
					else
						b++;
				}
			}
		}
		cout << h << " " << b << endl;
		cin >> r >> a;
	}
}
accuracy: 1
time_ms: 10
memory_kb: 3100
final_rank: 12

code_snippet: #include <bits/stdc++.h>
using namespace std;

int main() {
    while (true) {
        int r, a;
        cin >> r >> a;
        
        if (r==0 && a==0) {
            break;
        }
        
        int rn[4], an[4];
        
        rn[0] = r/1000;
        rn[1] = (r/100)%10;
        rn[2] = (r/10)%10;
        rn[3] = r%10;
        
        an[0] = a/1000;
        an[1] = (a/100)%10;
        an[2] = (a/10)%10;
        an[3] = a%10;
        
        int hit = 0;
        int blow = 0;
        
        bool is_hit[4];
        
        for (int i=0; i<4; i++) {
            is_hit[i] = false;
        }
        
        for (int i=0; i<4; i++) {
            if (rn[i]==an[i]) {
                hit++;
                is_hit[i] = true;
            }
        }
        
        for (int i=0; i<4; i++) {
            if (!(is_hit[i])) {
                for (int j=0; j<4; j++) {
                    if (!(is_hit[j]) && rn[i]==an[j]) {
                        blow++;
                    }
                }
            }
        }
        
        cout << hit << " " << blow << endl;
    }
}
accuracy: 1
time_ms: 10
memory_kb: 3016
final_rank: 2

code_snippet: #include <iostream>
#include <string>

using namespace std;

int main()
{
  while (1) {
    string r, a;

    cin >> r >> a;
    if (r == "0" && a == "0") break;
    int hit = 0, blow = 0;
    for (int i = 0; i < 4; i++) {
      for (int j = 0; j < 4; j++) {
        if (r[i] == a[j] && i == j) hit++;
        if (r[i] == a[j] && i != j) blow++;
      }
    }
    cout << hit << " " << blow << endl;
  }
}
accuracy: 1
time_ms: 10
memory_kb: 3040
final_rank: 4

code_snippet: #include <bits/stdc++.h>
using namespace std;
int main(void) {
    int r,a,r1,r2,r3,r4,a1,a2,a3,a4,hit=0,blow=0;
    while (cin>>r>>a) {
        if (r==0&&a==0) {
            break;
        } else {
            r1=r/1000;
            r2=(r-r1*1000)/100;
            r3=(r-r1*1000-r2*100)/10;
            r4=r-r1*1000-r2*100-r3*10;
            a1=a/1000;
            a2=(a-a1*1000)/100;
            a3=(a-a1*1000-a2*100)/10;
            a4=a-a1*1000-a2*100-a3*10;
            if (r1==a1) {
                hit++;
            } else if (r1==a2||r1==a3||r1==a4) {
                blow++;
            }
            if (r2==a2) {
                hit++;
            } else if (r2==a1||r2==a3||r2==a4) {
                blow++;
            }
            if (r3==a3) {
                hit++;
            } else if (r3==a1||r3==a2||r3==a4) {
                blow++;
            }
            if (r4==a4) {
                hit++;
            } else if (r4==a1||r4==a2||r4==a3) {
                blow++;
            }
        }
        cout<<hit<<" "<<blow<<endl;
        hit=0;
        blow=0;
    }
}
accuracy: 1
time_ms: 10
memory_kb: 3032
final_rank: 3

code_snippet: #include<bits/stdc++.h>
using namespace std;

int main(){
    string S,T;
    while(cin >> S >> T, S != "0" && T != "0"){
        set<char> st;
        for(char& c : S) st.insert(c);

        int hit = 0;
        int blow = 0;
        for(int i = 0; i < T.size(); i++){
            if(S[i] == T[i]) hit++;
            else blow += st.count(T[i]);
        }

        cout << hit << " " << blow << endl;
    }
}
accuracy: 1
time_ms: 10
memory_kb: 3108
final_rank: 13

code_snippet: #include <iostream>
#include <algorithm>
#include <map>

using namespace std;

class Solver{};

int main() {
	while (true) {
		int r, a;
		cin >> r >> a;
		if (r == 0)break;

		map<int, int> mp;
		for (int i = 0; i < 4; i++) {
			int div = pow(10, i);
			mp.emplace((r / div) % 10, i);
		}

		int h = 0;
		int b = 0;
		for (int i = 0; i < 4; i++) {
			int div = pow(10, i);
			int val = (a / div) % 10;
			if (mp.find(val) != mp.end()) {
				if (mp[val] == i)h++;
				else b++;
			}
		}

		cout << h << " " << b << endl;
	}
}
accuracy: 1
time_ms: 10
memory_kb: 3132
final_rank: 14

code_snippet: #include <bits/stdc++.h>
using namespace std;
const double eps=1e-9;
typedef vector<int> vi;
typedef long long ll;
string a,b;
int main(void)
{
    while(cin >> a >> b && a!="0") {
        int hit=0,blow=0;
        set<int> st;
        for (int i = 0; i < 4; i++) {
            st.insert(int(a[i]-'0'));
        }
        for(int i=0;i<4;i++)
        {
            if(a[i]==b[i])
            {
                hit++;
                continue;
            }
            else
            {
                auto it=st.find(int(b[i]-'0'));
                if(it!=st.end()) blow++;
            }
        }
        cout << hit << ' ' << blow << endl;
    }

  return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 3144
final_rank: 16

code_snippet: #include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)
#define pp pair<int,int>
#define ll long long
#define ld long double
int inf=100000000;
ll INF=5000000000000000000;
ll MOD=1000000007;


int main() {
    while (true){
    string a,b;
    cin >> a >> b;
    if (a=="0") break;
    int h=0,k=0;
    rep(i,4){
        rep(j,4){
            if (a.at(i)==b.at(j) && i==j) h++;
            else if (a.at(i)==b.at(j)) k++;
        }
    }
    cout << h << " " << k << endl;
    }
}
accuracy: 1
time_ms: 10
memory_kb: 3144
final_rank: 16

code_snippet: #include <cstdio>
#include <iostream>
#include <vector>
#include <string>
using namespace std;

int solve_testcase() {
  string s, t; cin >> s >> t;
  if(s == "0" and t == "0") return 1;

  int blow = 0, hit = 0;
  vector<bool> seen(4, false);
  vector<bool> A(10), B(10);
  for(int k=0; k<4; k++) {
    if(s[k] == t[k]) {
      hit++;
    }
    else {
      A[ s[k] - '0' ] = true;
      B[ t[k] - '0' ] = true;
    }
  }

  for(int i=0; i<10; i++) {
    if(A[i] and B[i]) blow++;
  }

  cout << hit << " " << blow << endl;
  return 0;
}

int main() {
  while(!solve_testcase());
  return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 3080
final_rank: 8

code_snippet: #include <iostream>
using namespace std;
int main(void){
    int R, A; //正解と回答

    while(true){
        cin >> R >> A;
        if(R == 0 && A == 0) break;

        int r[4], a[4]; //４桁の数字を分解するための箱
        for(int i = 0; i < 4; i++){
            r[3 - i] = R % 10;
            a[3 - i] = A % 10;
            R /= 10;
            A /= 10;
        }

        int c_hit = 0; //ヒットの数を数える
        int c_blow = 0; //ブローの数を数える

        for(int i = 0; i < 4; i++){
            if(r[i] == a[i])
                c_hit++;
            for(int j = 0; j < 4; j++){
                if(i != j) 
                    if(r[i] == a[j]) c_blow++;
            }
        }
        cout << c_hit << " " << c_blow << endl;
    }
}
accuracy: 1
time_ms: 10
memory_kb: 3084
final_rank: 9

code_snippet: #define _CRT_SECURE_NO_WARNINGS
#include "bits/stdc++.h"
using namespace std;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define FOR(i, m, n) for(int i=(m); i<(n); ++i)
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(),(x).end()
#define mp make_pair
#define pb push_back
#define Cout(x) cout << (x) << endl
#define Cout2(x, y) cout << (x) << " " << (y) << endl
#define dump(x) cout << #x << " = " << (x) << endl;
#define forauto(i, a) for(auto i : a)cout << i << " "; puts("");
typedef long long LL;
typedef vector<int> VI;
typedef vector<LL> VL;
typedef vector<string> VS;
typedef vector<bool> VB;
typedef vector<vector<int>> VVI;
typedef pair<int, int> PII;
const int inf = 1e9;
const double pi = acos(-1.0);


int main() {
	string a, b;
	while (cin >> a >> b && (a != "0" || b != "0")) {

		int a1 = 0, a2 = 0;
		rep(i, 4)a1 += a[i] == b[i];
		rep(i, 10)a2 += min(count(all(a), '0' + i), count(all(b), '0' + i));
		Cout2(a1, a2 - a1);
	}
}
accuracy: 1
time_ms: 10
memory_kb: 3140
final_rank: 15

code_snippet: #include <iostream>
#include <string>

using namespace std;

int main() {
	
	string t1, t2;

	while (cin >> t1 >> t2 && t1 != "0" && t2 != "0") {

		int h = 0, b = 0;

		for (int i = 0; i < 4; i++) {
			for (int j = 0; j < 4; j++) {

				if (t1[i] == t2[j] && i == j)
					h++;

				else if (t1[i] == t2[j] && i != j)
					b++;
			}
		}

		cout << h << " " << b << "\n";
		
	}

	return 0;

}
accuracy: 1
time_ms: 10
memory_kb: 3160
final_rank: 20

code_snippet: #include <iostream>
#include <cstdlib>
using namespace std;

int main()
{	
	char r[5], a[5];

	cin >> r >> a;

	while (atoi(r) != 0 || atoi(a) != 0) {
		int h = 0, b = 0;

		for (int i = 0; i < 4; i++) {
			for(int j = 0; j < 4; j++)
				if (r[i] == a[j]) {
					if (i == j)
						h++;
					else
						b++;
				}
		}

		cout << h << " " << b << endl;
		cin >> r >> a;
	}

	return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 3000
final_rank: 1

code_snippet: #include<iostream>
#include<string>
using namespace std;

int main()
{
    string s, t;
    int j[10];

    while( cin >> s >> t )
    {
        if( s == "0" && t == "0" )
            break;
        for( int i = 0; i < 10; i++ )
            j[i] = 0;

        int hit = 0, blow = 0;
        for( int i = 0; i < 4; i++ )
        {
            if( s[i] == t[i] )
                hit++;
            j[s[i]-'0']++;
            j[t[i]-'0']++;
        }
        for( int i = 0; i < 10; i++ )
            if( j[i] == 2 )
                blow++;
        cout << hit << " " << blow - hit << endl;
    }
    return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 3144
final_rank: 16

code_snippet: #include<iostream>
#include<string>
using namespace std;
int main() {
	string a, b,keta[5];
	int ans[4],kt[5];
	while (1) {
		for (int i = 0; i <= 5; i++) {
			kt[i] = 1;
		}
		cin >> a >> b;
		if (a == "0"&&b == "0") {
			goto a;
		}
		for(int i=0;i<=3;i++){
			keta[i] = a[i];
		}
		ans[1] = 0;
		ans[2] = 0;
		for (int i = 0; i <= 3; i++) {
			if (a[i] == b[i]) {
				ans[1] = ans[1] + 1;
				kt[i] = 0;
			}
		}
		for (int i = 0; i <= 3; i++) {
			for (int z = 0; z <= 3; z++) {
				if (a[i] == b[z]) {
					if (kt[z]) {
						ans[2] = ans[2] + 1;
					}
				}
			}
		}
		cout << ans[1] << " " << ans[2] << endl;
	}
a:;
}
accuracy: 1
time_ms: 10
memory_kb: 3088
final_rank: 10

code_snippet: #include <iostream>
#include <vector>
int usage(int a, int digit = 0) {
	if (digit == 4) return 0;
	return (1 << (a % 10)) + usage(a / 10, digit + 1);
}
int hit(int a, int b) {
	int res = 0;
	for (auto i = 0; i < 4; ++i) {
		res += (a % 10 == b % 10) ? 1 : 0;
		a /= 10; b /= 10;
	}
	return res;
}
int brow(int a, int b) {
	int ua = usage(a); int ub = usage(b);
	int res = -hit(a, b);
	for (auto i = 0; i < 10; ++i) {
		res += (ua & ub & 1);
		ua >>= 1; ub >>= 1;
	}
	return res;
}
int main() {
	int a, b;
	std::cin >> a >> b;
	while (a != 0 && b != 0) {
		std::cout << hit(a, b) << ' ' << brow(a, b) << std::endl;
		std::cin >> a >> b;
	}
}
accuracy: 1
time_ms: 10
memory_kb: 3072
final_rank: 6

code_snippet: #include<bits/stdc++.h>

using namespace std;

int main(){

  string s,k;

  while(1){

	cin>>s>>k;

	if(s == "0" && k == "0")
	  break;

	int hit=0;
	int blow=0;
	
	for(int i=0;i<4;++i){

	  if(s[i] == k[i])
		hit++;

	  else{
		for(int j=0;j<4;++j){

		  if(s[i]==k[j]){
			blow++;
			break;
		  }
		}
		
	  }
	
	}

	cout<<hit<<" "<<blow<<endl;
	
  }
}
accuracy: 1
time_ms: 10
memory_kb: 3156
final_rank: 19