#include <iostream>
#include <vector>
#include <set>
#include <algorithm>

std::vector<int> split( int v )
{
    std::vector<int> r;
    while( v ) {
        r.push_back( v % 10 );
        v /= 10;
    }
    return r;
}

int main()
{
    int target = 1234;
    int guess = 1783;
	
    auto targetv = split( target );
    auto guessv = split( guess );

    auto bulls = std::count_if( guessv.begin(), guessv.end(),
            [it = targetv.begin()]( int i ) mutable 
        { return i == *it++; }  );
        
    auto cows  = std::count_if( guessv.begin(), guessv.end(),
            [s = std::set<int>{ targetv.begin(), targetv.end() }]( int i ) 
	    { return s.count( i ); }  );

    cows -= bulls;
	
    std::cout << "bulls:" << bulls << " cows:" << cows << std::endl;
    return 0;
}