#include "Azzurro.h"
namespace {
// グローバル変数と内部関数は無名名前空間内で宣言すること
// All global variables and internal functions should be declared in an unnamed namespace
int variable_example = 0;
int function_example(void) { return 0; }
}
std::vector<std::vector<int>> Azzurro(int N, int L, std::string S) {
std::vector<std::vector<int>> x(N, std::vector<int>(N, 0));
int ptr = 0;
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 4; j++) {
if(i + j == 4) continue;
if(ptr >= S.size()) continue;
if(S[ptr] == 'A') {
x[i][j + 4] = 0;
x[i + 4][j] = 0;
}
else {
x[i][j + 4] = 1;
x[i + 4][j] = 1;
}
ptr++;
}
}
for(int i = 0; i < 7; i++) {
if(ptr >= S.size()) continue;
int j = i;
int v = 0;
if(S[ptr] == 'B') v ^= 1;
while(j >= 0) v ^= x[i - j][j--];
if(v != 0) {
j = i;
while(j >= 0) {
if(!(((i - j) >= 4 && j < 4) || ((i - j) < 4 && j >= 4))) {
x[i - j][j] ^= 1;
break;
}
}
}
ptr++;
}
for(int i = 8; i < 15; i++) {
if(ptr >= S.size()) continue;
int j = 7;
int v = 0;
if(S[ptr] == 'B') v ^= 1;
while(j >= 0) v ^= x[i - j][j--];
if(v != 0) {
j = i;
while(j >= 0) {
if(!(((i - j) >= 4 && j < 4) || ((i - j) < 4 && j >= 4))) {
x[i - j][j] ^= 1;
break;
}
}
}
ptr++;
}
return x;
}
#include "Bordeaux.h"
namespace {
// グローバル変数と内部関数は無名名前空間内で宣言すること
// All global variables and internal functions should be declared in an unnamed namespace
int variable_example = 0;
int function_example(void) { return 0; }
}
std::string Bordeaux(int N, int L, std::vector<std::vector<int>> T) {
std::vector < int > res(61);
int flag = 0;
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 4; j++) {
if(i + j == 4 && T[i + 4][j] == 0) flag = 1;
}
}
int ptr = 0;
if(flag) {
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 4; j++) {
if(i + j == 4) continue;
res[ptr] = T[i][j + 4];
ptr++;
}
}
}
else {
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 4; j++) {
if(i + j == 4) continue;
res[ptr] = T[i + 4][j];
ptr++;
}
}
}
for(int i = 0; i < 7; i++) {
int j = i;
while(j >= 0) {
res[ptr] ^= T[i - j][j];
j--;
}
ptr++;
}
for(int i = 8; i < 15; i++) {
int j = 7;
while(j >= 0) {
res[ptr] ^= T[i - j][j];
j--;
}
ptr++;
}
std::string s(L, 'A');
for(int j = 0; j < L; j++) {
if(res[j] == 1) s[j] = 'B';
}
return s;
}