int
board_checker::operator()(board& b)
const
{
if ( int id = b(1,1) )
if ((b(0,0) == id && b(2,2) == id ) ||
(b(0,2) == id && b(2,0) == id) ||
(b(0,1) == id && b(2,1) == id) ||
(b(1,0) == id && b(1,2) == id) )
return id;
if ( int id = b(0,0) )
if ((b(0,1) == id && b(0,2) == id) ||
(b(1,0) == id && b(2,0) == id) )
return id;
if ( int id = b(2,2) )
if ((b(1,2) == id && b(0,2) == id) ||
(b(2,1) == id && b(2,0) == id) )
return id;
bool draw=true;
for (int x = 0; draw && x < 3; ++x )
for (int y = 0; draw && y < 3; ++y )
draw = b(x,y) != 0;
if ( draw )
return -1;
// not finish
return 0;
}
turugina
#6206()
[
Other
]
Rating0/0=0.00
drawを先に判定しちゃダメじゃん...
というわけで、100万回試行の結果がちゃんと
になりました。
int board_checker::operator()(board& b) const { if ( int id = b(1,1) ) if ((b(0,0) == id && b(2,2) == id ) || (b(0,2) == id && b(2,0) == id) || (b(0,1) == id && b(2,1) == id) || (b(1,0) == id && b(1,2) == id) ) return id; if ( int id = b(0,0) ) if ((b(0,1) == id && b(0,2) == id) || (b(1,0) == id && b(2,0) == id) ) return id; if ( int id = b(2,2) ) if ((b(1,2) == id && b(0,2) == id) || (b(2,1) == id && b(2,0) == id) ) return id; bool draw=true; for (int x = 0; draw && x < 3; ++x ) for (int y = 0; draw && y < 3; ++y ) draw = b(x,y) != 0; if ( draw ) return -1; // not finish return 0; }Rating0/0=0.00-0+