Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
智囊团C++;关于GoW 我看了一个“纯”C++解决方案,在计算游戏中的精确和错位的PEG数,比较猜测和隐藏代码。_C++ - Fatal编程技术网

智囊团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) { }