0
我看了一下that article on Guru Of the Week,其中提出了一個「純粹的」C++解決方案來計算主謀遊戲中確切的和錯位的peg的數量,並將猜測和隱藏代碼進行比較。GoW上的Mastermind 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
所有的想法會受到歡迎?
我還沒有嘗試找出不工作,但是這是如何濫用標準庫中的可怕的例子,爲了混淆。不要這樣編程。 (這看起來像是一個有趣的挑戰,而不是嚴肅的代碼,第二段末尾的括號表示同樣多)。 –