智囊团C++;关于GoW 我看了一个“纯”C++解决方案,在计算游戏中的精确和错位的PEG数,比较猜测和隐藏代码。
但是当我使用代码时智囊团C++;关于GoW 我看了一个“纯”C++解决方案,在计算游戏中的精确和错位的PEG数,比较猜测和隐藏代码。,c++,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 ) {
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";
}
欢迎所有想法?错误放置的peg(代码中的调用
颜色
)数量仍然为0,因为在以下情况下:
Color( M& cm, M& gm, int& color )
: cm_(cm), gm_(gm), color_(color=0) { }
作者在成员初始化之前重置int&
值。
要解决这个问题,我们可以采用几种方法,但最简单的方法是将计数
中的颜色
值重置为精确的
值。因此Color
和Count
构造函数变成:
Color( M& cm, M& gm, int& color )
: cm_(cm), gm_(gm), color_(color) { }
及
我没有试图找出什么不起作用,但这是一个如何滥用标准库以混淆的可怕例子。不要这样编程。(这看起来像是一个有趣的挑战,而不是严肃的代码。第二段末尾的括号也暗示了这一点。)
Color( M& cm, M& gm, int& color )
: cm_(cm), gm_(gm), color_(color) { }
Count( int& color, int& exact )
: color_(color = 0), exact_(exact=0) { }