AOJ 0183 - Black-and-White
これは長いなと思っていたら,意外と短いほうだった.
しかし,納得の行かないコード
#include <iostream> using namespace std; int main(){ string m[3]; while(std::cin >> m[0], m[0][0] != '0'){ for(int i=1;i<3;i++)std::cin >> m[i]; string w = "NA"; for(int i=0;i<3;i++){ if(m[i][0] == m[i][1] && m[i][0] == m[i][2]) if(m[i][0] != '+')w = m[i][0]; if(m[0][i] == m[1][i] && m[0][i] == m[2][i]) if(m[0][i] != '+')w = m[0][i]; } if(m[0][0] == m[1][1] && m[0][0] == m[2][2]) if(m[0][0] != '+')w = m[0][0]; if(m[0][2] == m[1][1] && m[0][2] == m[2][0]) if(m[0][2] != '+')w = m[0][2]; std::cout << w << std::endl; } } <|| 短くしてみたが,無駄なように感じられる. >|cpp| #include <iostream> int main(){ std::string m[3], w; while(std::cin >> m[0], m[0][0] != '0'){ for(int i=1;i<3;i++)std::cin >> m[i]; w = "NA"; char c; for(int i=0;i<3;i++){ c = m[i][0]; if(2*c - m[i][1] - m[i][2] == 0 && c - '+')w = c; c = m[0][i]; if(2*c - m[1][i] - m[2][i] == 0 && c - '+')w = c; } c = m[0][0]; if(2*c - m[1][1] - m[2][2] == 0 && c - '+')w = c; c = m[0][2]; if(2*c - m[1][1] - m[2][0] == 0 && c - '+')w = c; std::cout << w << '\n'; } }