Go: package main

import (
	"bufio"
	"os"
	"strings"
	"strconv"
	"fmt"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	a := make([]int, 4)
	b := make([]int ,4)
	for scanner.Scan() {
		inputa := strings.Split(scanner.Text(), " ")
		for i := range a {
			a[i], _ = strconv.Atoi(inputa[i])
		}
		scanner.Scan()
		inputb := strings.Split(scanner.Text(), " ")
		for i := range b {
			b[i], _ = strconv.Atoi(inputb[i])
		}
		hit := 0
		blow := 0
		if a[0] == b[0] {
			hit++
		}
		if a[1] == b[1] {
			hit++
		}
		if a[2] == b[2] {
			hit++
		}
		if a[3] == b[3] {
			hit++
		}
		if a[0] == b[1] {
			blow++
		}
		if a[1] == b[2] {
			blow++
		}
		if a[2] == b[3] {
			blow++
		}
		if a[1] == b[0] {
			blow++
		}
		if a[2] == b[1] {
			blow++
		}
		if a[2] == b[0] {
			blow++
		}
		if a[3] == b[2] {
			blow++
		}
		if a[3] == b[1] {
			blow++
		}
		if a[3] == b[0] {
			blow++
		}
		if a[0] == b[2] {
			blow++
		}
		if a[1] == b[3] {
			blow++
		}
		if a[0] == b[3] {
			blow++
		}
		fmt.Printf("%d %d\n", hit, blow)
	}
}

C++: #include <iostream>
#include <array>

int main(){
  std::array<int, 4> a = {};
  std::array<int, 4> b = {};
  int hit = 0;
  int blow = 0;
  int N = 0;

  while(N <= 50 && std::cin >> a[0] >> a[1] >> a[2] >> a[3] && std::cin >> b[0] >> b[1] >> b[2] >> b[3]){
    

    for(int i = 0;i < 4;++i){
      for(int j = 0;j < 4;++j){
	if(a[i] == b[j] && i == j)
	  ++hit;
	if(a[i] == b[j] && i != j)
	  ++blow;
      }
    }
    std::cout << hit << " " << blow << std::endl;

    hit = 0;
    blow = 0;
    ++N;
  }
}

C++: #include<iostream>
#include<algorithm>
using namespace std;

int main() {
  int a[4], b[4];

  while (cin >> a[0]) {
    for (int i = 1; i < 4; i++) cin >> a[i];
    for (int i = 0; i < 4; i++) cin >> b[i];

    int hit = 0;
    for (int i = 0; i < 4; i++)
      if (a[i] == b[i])
        hit++;

    int blow = 0;
    bool aa[10], bb[10];
    for (int i = 0; i < 10; i++)
      aa[i] = bb[i] = false;

    for (int i = 0; i < 4; i++) {
      aa[a[i]] = true;
      bb[b[i]] = true;
    }

    for (int i = 0; i < 10; i++)
      if (aa[i] and bb[i])
        blow++;

    cout << hit << " " << blow - hit << endl;
  }
}

C++: #include<iostream>
using namespace std;

int A[4], B[4], numberOfHit, numberOfBlow;

void compute(){
  numberOfHit = numberOfBlow = 0;
  bool hasA[10];
  for ( int i = 0; i <= 9; i++ ) hasA[i] = false;

  for ( int i = 0; i < 4; i++ ){
    if ( A[i] == B[i] ) numberOfHit++;
    hasA[ A[i] ] = true;
  }

  for ( int i = 0; i < 4; i++ ){
    if ( hasA[ B[i] ] && A[i] != B[i] ) numberOfBlow++;
  }

  cout << numberOfHit << " " << numberOfBlow << endl;
}

main(){
  while ( cin >> A[0] >> A[1] >> A[2] >> A[3] ){
    cin >> B[0] >> B[1] >> B[2] >> B[3];
    compute();
  }
}

C++: #include <iostream>
#include <array>

int main(){
	std::array<u_int, 4> a,b;
	int hit=0, blow=0;

	while(std::cin >> a[0] >> a[1] >> a[2] >> a[3]){
		std::cin >> b[0] >> b[1] >> b[2] >> b[3];
		for(int i=0;i<4;i++){
			if(a[i]==b[i]) hit++;
			for(int j=0;j<4;j++){
				if(a[i]==b[j]) blow++;
			}
		}
		std::cout << hit << blow-hit << std::endl;
	}

    return 0;
}

C++: #include <iostream>
#include <string>
#include <math.h>
using namespace std;

void findHitAndBlow(int imagineNum[],int guessNum[]);

int main()
{
    int imagineNum[50][4]={0},guessNum[50][4]={0};
    int counts=0;
    bool isHit[4] = {false};
       int hit = 0;
       int blow = 0;
    while (cin >> imagineNum[counts][0] >> imagineNum[counts][1] >> imagineNum[counts][2] >> imagineNum[counts][3] >> guessNum[counts][0] >> guessNum[counts][1] >> guessNum[counts][2] >> guessNum[counts][3]){

       isHit[0] = false;
       isHit[1] = false;
       isHit[2] = false;
       isHit[3] = false;
        hit =0;
        blow = 0;
       for(int i = 0; i< 4;i++){
            if(imagineNum[counts][i] == guessNum[counts][i]){
                hit++;
                isHit[i] = true;
            }
       }
        for(int i = 0;i < 4;i++){
            if(isHit[i]) {
                continue;
            }
            for(int j = 0;j < 4;j++){
                if(isHit[j]){
                    continue;
                }
                if(imagineNum[counts][i] == guessNum[counts][j]){
                    blow++;
                }
            }
        }
        cout << hit << " " << blow << endl;
        counts++;
    }

//    for(int i = 0; i< counts ; i++){
//        findHitAndBlow(imagineNum[i],guessNum[i]);
//    }
    return 0;
}
void findHitAndBlow(int imagineNum[],int guessNum[]){
   bool isHit[4] = {false};
   int hit = 0;
   int blow = 0;
   for(int i = 0; i< 4;i++){
        if(imagineNum[i] == guessNum[i]){
            hit++;
            isHit[i] = true;
        }
   }
    for(int i = 0;i < 4;i++){
        if(isHit[i]) {
            continue;
        }
        for(int j = 0;j < 4;j++){
            if(isHit[j]){
                continue;
            }
            if(imagineNum[i] == guessNum[j]){
                blow++;
            }
        }
    }
    cout << hit << " " << blow << endl;
}

/*
Let's play Hit and Blow game. A imagines four numbers and B guesses the numbers. After B picks out four numbers, A answers:
•	The number of numbers which have the same place with numbers A imagined (Hit)
•	The number of numbers included (but different place) in the numbers A imagined (Blow)
For example, if A imagined numbers:
9 1 8 2
and B chose:
4 1 5 9
A should say 1 Hit and 1 Blow.
Write a program which reads four numbers A imagined and four numbers B chose and prints the number of Hit and Blow respectively. You may assume that the four numbers are all different and within from 0 to 9.
Input
The input consists of multiple datasets. Each dataset set consists of:
a1 a2 a3 a4
b1 b2 b3 b4
, where ai (0 ≤ ai ≤ 9) is i-th number A imagined and bi (0 ≤ bi ≤ 9) is i-th number B chose.
The input ends with EOF. The number of datasets is less than or equal to 50.
Output
For each dataset, print the number of Hit and Blow in a line. These two numbers should be separated by a space.
Sample Input
9 1 8 2
4 1 5 9
4 6 8 2
4 6 3 2
Output for the Sample Input
1 1
3 0
*/

C++: #include<iostream>

int main(){
  int a[4];
  int b[4];
  int i,j,hit,blow;

  while(std::cin >> a[0]){
    std::cin >> a[1] >> a[2] >> a[3]
             >> b[0] >> b[1] >> b[2] >> b[3];
    hit = 0;
    blow = 0;
    for(i=0;i<4;i++){
      if(a[i]==b[i]){
        ++hit;
      }
      for(j=i+1;j<4;j++){
        if(a[i]==b[j]){
          ++blow;
        }
      }
    }
    std::cout << hit << ' ' << blow << std::endl;
  }
}

C++: #include <iostream>
using namespace std;

int main() {
    int a[4], b[4];
    while (cin >> a[0] >> a[1] >> a[2] >> a[3]) {
        cin >> b[0] >> b[1] >> b[2] >> b[3];
        int hit = 0, blow = 0;
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                if (i == j) {
                    hit += (a[i] == b[j]);
                } else {
                    blow += (a[i] == b[j]);
                }
            }
        }
        cout << hit << " " << blow << endl;
    }
}

C++: #include <iostream>
using namespace std;

int main(){
  int a[4],b[4];
  while(cin>>a[0]>>a[1]>>a[2]>>a[3]>>b[0]>>b[1]>>b[2]>>b[3]){
    int ht=0;
    int br=0;
    for(int i=0;i<4;i++){
      for(int j=0;j<4;j++){
	if(a[i]==b[j]&&i==j){
	  ht++;
	  break;
	}
	else if(a[i]==b[j]){
	  br++;
	  break;
	}
      }
    }
    cout<<ht<<" "<<br<<endl;
  }
  return 0;
}

C++: #include <iostream>
#include <vector>

int main(){
	std::vector<int> a(4, 0), b(4, 0);
	
	while(std::cin >> a[0] >> a[1] >> a[2] >> a[3]){
		std::cin >> b[0] >> b[1] >> b[2] >> b[3];
		int hit = 0, blow = 0;
		for(int i = 0 ; i < 4 ; ++i){
			if(a[i] == b[i]){
				++hit;
				continue;
			}
			for(int j = 0 ; j < 4 ; ++j){
				if(a[i] == b[j])
					++blow;
			}
		}
		std::cout << hit << " " << blow << std::endl;
	}
    return 0;
}