我看过Guru Of the Week 上的那篇文章,其中提出了一个“纯”C++ 解决方案来计算策划游戏中准确和错位的钉子的数量,比较猜测和隐藏的代码。
但是当我使用代码时
string colors("BGR"), comb(4, '.'), l(comb), guess;
typedef map<int,int> M;
struct Color
{
Color( M& cm, M& gm, int& color )
: cm_(cm), gm_(gm), color_(color=0) { }
void operator()( char c )
{
color_ += min( cm_[c], gm_[c] );
}
M &cm_, &gm_;
int& color_;
};
struct Count
{
Count( int& color, int& exact )
: color_(color), exact_(exact=0) { }
char operator() ( char c, char g )
{
return ++cm_[c], ++gm_[toupper(g)], exact_ += c == toupper(g), '.';
}
~Count()
{
for_each( colors.begin(), colors.end(), Color( cm_, gm_, color_ ) );
}
M cm_, gm_;
int &color_, &exact_;
};
char ChoosePeg()
{
return colors[rand() % colors.size()];
}
int main()
{
int color, exact = 0;
srand( time(0) ), generate( comb.begin(), comb.end(), ChoosePeg );
while( exact < comb.length() )
{
cout << "\n\nguess--> ", cin >> guess;
transform( comb.begin(), comb.end(),
guess.begin(), l.begin(),
Count( color, exact ) );
cout << color << ' ' << exact;
}
cout << " - solved!\n";
}
“颜色”数字始终为 0,即使它应该与它们提供的示例不同。我硬编码了代码组合“RRBB”,当我输入“rbrr”时,预期的结果是:3 1,但我的输出是:
guess--> rbrr
0 1
欢迎所有想法?