ソースコード
#include <iostream>
#include <vector>
using namespace std;
bool inside(int x, int y, int lim){
return 0 <= x && x < lim && 0 <= y && y < lim;
}
struct othelloPlay{
int player = 0, boardsize;
bool passed = false;
vector<vector<int>> board;
void init(int s = 8){
boardsize = s;
board = vector<vector<int>>(boardsize, vector<int>(boardsize, -1));
int mid = boardsize / 2;
board[mid - 1][mid] = board[mid][mid - 1] = 0;
board[mid - 1][mid - 1] = board[mid][mid] = 1;
}
int pieceCount(){
int r = 0;
for(int i = 0; i < board.size(); i++) for(int j = 0; j < board[0].size(); j++) r += board[i][j] != -1;
return r;
}
int canPut(int x, int y){
if(board[x][y] != -1) return 0;
int r = 0, dd[] = {0, 1, 1, 0, -1, 1, -1, -1, 0};
for(int i = 0; i < 8; i++){
bool f = false;
int count = 0, xx = x + dd[i], yy = y + dd[i + 1];
while(inside(xx, yy, boardsize)){
if(board[xx][yy] != !(player & 1)){
f = board[xx][yy] == (player & 1);
break;
}
count++;
xx += dd[i];
yy += dd[i + 1];
}
if(f && count) r += count;
}
return r;
}
vector<pair<int, int>> canMoves(){
vector<pair<int, int>> vp;
for(int i = 0; i < boardsize; i++) for(int j = 0; j < boardsize; j++) if(canPut(i, j)) vp.push_back(make_pair(i, j));
return vp;
}
int put(int x, int y){
if(!canPut(x, y)) return 0;
board[x][y] = player & 1;
int r = 1, dd[] = {0, 1, 1, 0, -1, 1, -1, -1, 0};
for(int i = 0; i < 8; i++){
bool f = false;
int xx = x + dd[i], yy = y + dd[i + 1];
vector<pair<int, int>> gets;
while(inside(xx, yy, boardsize)){
if(board[xx][yy] != !(player & 1)){
f = board[xx][yy] == (player & 1);
break;
}
gets.push_back(make_pair(xx, yy));
xx += dd[i];
yy += dd[i + 1];
}
if(f && gets.size()){
for(auto p:gets) board[p.first][p.second] = player & 1;
r += gets.size();
}
}
player++;
return r;
}
bool pass(){
bool prev = passed;
player++;
passed = true;
return prev;
}
};
int main(){
othelloPlay othello;
othello.init();
for(int i = 0; i < 8; i++){
string s;
cin >> s;
for(int j = 0; j < 8; j++) othello.board[i][j] = s[j] == '-' ? -1 : s[j] == 'w';
}
int c;
string t;
cin >> c >> t;
int a = t[0] - 'A', b = t[1] - '0';
cerr << a << ' ' << b << endl;
othello.player = c;
othello.put(--b, a);
for(int i = 0; i < 8; i++){
for(int j = 0; j < 8; j++) cout << (othello.board[i][j] == -1 ? '-' : "bw"[othello.board[i][j] == 1]);
cout << endl;
}
}