online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code   
Language
#include<iostream> #include<string> #include<cstdlib> #include<cmath> using namespace std; struct Ind_data; class eAP; class eAI; eAP* AP; eAI* AI; struct Ind_data { std::string move; std::string proc; int hod = 0; int total = 0; int lsbank = 24; int nbank[9]{}; }; class base { public: int** field = new int* [21]; int* ysa = new int[25]; int* xsa = new int[25]; int* lis = new int[25]; void Mat() { for (int i = 0; i < 21; i++) { field[i] = new int[21]; } } void Freemat() { for (int i = 0; i < 21; i++) { delete[] field[i]; } delete[] field; } void WMLS() { int x, y, xw, yw, i = 0; int* xs = new int[1000]; int* xe = new int[1000]; int* ys = new int[1000]; int* ye = new int[1000]; string* ipd = new string[60]; bool m = true; bool w = true; int a = 24; int br = 0; for (x = 0; x <= 20; x++) { for (y = 0; y <= 20; y++) { if (x % 2 == 0 || (x % 2 != 0 && y % 2 == 0)) { field[x][y] = 0; } else { field[x][y] = 2; } } } while (m == true) { i++; ipd[i] = ""; cin >> ipd[i]; if (ipd[i].length() == 4) { int n = stoi(ipd[i]); int start = n / 100; int end = n % 100; xs[i] = start % 10; ys[i] = start / 10; xe[i] = end % 10; ye[i] = end / 10; for (x = 0; x <= 20; x++) { for (y = 0; y <= 20; y++) { if (x >= (xs[i] * 2 + 1) && (x <= (xe[i] * 2 + 1)) && (y >= (ys[i] * 2 + 1) && (y <= (ye[i] * 2 + 1)) && (field[x][y] == 2))) { field[x][y] = 3; } } } } else { m = false; } } while (w == true) { if (ipd[i][2] != 'E' && (ipd[i][2] != 'W') && (ipd[i][2] != 'S') && (ipd[i][2] != 'N')) { w = false; } else { yw = ((int)ipd[i][0]) - 48; xw = ((int)ipd[i][1]) - 48; y = yw * 2 + 1; x = xw * 2 + 1; switch (ipd[i][2]) { case ('E'): { field[x + 1][y] = 1; } break; case ('W'): { field[x - 1][y] = 1; } break; case ('S'): { field[x][y - 1] = 1; } break; case ('N'): { field[x][y + 1] = 1; } break; } i++; cin >> ipd[i]; } } br = i; string* ls = new string[25]; for (i = 1; i < 25; i++) { if (i == 1) { ls[i] = ipd[br]; } else { cin >> ls[i]; } ysa[i] = (((int)ls[i][0]) - 48) * 2 + 1; lis[i] = (((int)ls[i][2]) - 48) * 2 + 1; xsa[i] = (((int)ls[i][1]) - 48) * 2 + 1; } field[1][1] = 4; field[1][19] = 4; field[19][1] = 4; field[19][19] = 4; } }; class eAP { public: int x = 1, y = 1, score = 0, j = 0; int* inv = new int[4]; int sb = 150, mb = 30, jb = 60, rb = 75, lb = 75, bb = 30; int rot = 90; void Freeinv() { delete[] inv; } void iniinv() { for (int i = 1; i < 4; i++) { inv[i] = 0; } } void MOVE(Ind_data data, base origin, eAI& AI); void Freeinvga(Ind_data data) { cout << "!!--!!" << endl; int i = 1, count = 0, l = 1; for (i; i <= j - 1; i++) { for (l; l < 9; l++) { if (inv[i] == data.nbank[l]) count++; } if (count == 0) { score = score + 2; data.nbank[inv[i]] = inv[i]; } else { score++; } count = 0; } j = 1; for (i = 1; i < 4; i++) { inv[i] = 0; } } void finalpose() { cout << "Final position is(for x) " << (x - 1) / 2 << endl; cout << "Final position is(for y) " << (y - 1) / 2 << endl; cout << "Score " << score << endl; cout << "samples on the board " << j - 1 << endl; } }; void printline() { cout << "------------------------------------------------------------------------------------------------------------" << endl; } class eAI { public: int x, y, score = 0, j = 1; int* inv = new int[4]; int sb = 150, mb = 30, jb = 60, rb = 75, lb = 75, bb = 30; int rot = 90; void iniinv() { for (int i = 1; i < 4; i++) { inv[i] = 0; } } void Freeinv() { delete[] inv; } void MOVE(Ind_data data, base origin, eAP AP) { int k, i = 0; int d = 0; bool multi = true; cout << "round" << data.hod << endl; data.proc = ""; if (data.hod != 0) { cin >> data.move; } k = data.move.length(); if (data.move.length() + data.total > 420) { k = (data.move.length() + data.total) - 420; } for (int i = 0; i < k; i++) { switch (data.move[i]) { case 'S': { if (sb > 0) { data.proc = data.proc + data.move[i]; sb--; } } break; case 'J': { if (jb > 0) { data.proc = data.proc + data.move[i]; jb--; } } break; case 'M': { if (mb > 0) { data.proc = data.proc + data.move[i]; mb--; } } break; case 'B': { if (bb > 0) { data.proc = data.proc + data.move[i]; bb--; cout << rot <<"!" << endl; } } break; case 'R': { if (rb > 0) { data.proc = data.proc + data.move[i]; rb--; } } break; case 'L': { if (lb > 0) { data.proc = data.proc + data.move[i]; lb--; } } break; } } for (int r = 0; r < data.proc.length(); r++) { multi = true; switch (data.proc[r]) { case 'S': { switch (rot) { case 90: { if (origin.field[x][y + 1] != 1 && (origin.field[x][y] == origin.field[x][y + 2] || origin.field[x][y] == 4 || origin.field[x][y + 2] == 4) && ((y + 2) < 20) && ((y + 2) != AP.y || x != AP.x)) { y = y + 2; for (int i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 60; origin.ysa[i] = i + 60; cout << "Found sample" << endl; } } cout << y << "!!!" << endl; } } break; case 180: { if (origin.field[x - 1][y] != 1 && (origin.field[x][y] == origin.field[x - 2][y + 2] || origin.field[x][y] == 4 || origin.field[x - 2][y] == 4) && ((x - 2) > 0) && (x - 2) != AP.x || y != AP.y) x = x - 2; for (int i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 60; origin.ysa[i] = i + 60; } } } break; case 270: { if (origin.field[x][y - 1] != 1 && (origin.field[x][y] == origin.field[x][y - 2] || origin.field[x][y] == 4 || origin.field[x][y - 2] == 4) && ((y - 2) > 0) && (y - 2) != AP.y || x != AP.x) y = y - 2; for (int i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; } } } break; case 0: { if (origin.field[x + 1][y] != 1 && (origin.field[x][y] == origin.field[x + 2][y] || origin.field[x][y] == 4 || origin.field[x + 2][y] == 4) && ((x + 2) < 20) && (x + 2) != AP.x || y != AP.y) x = x + 2; for (int i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; } } } break; } if (origin.field[x][y] == 4 && j > 1) { Freeinvga(data); } } break; case 'J': { switch (rot) { case 90: { if (y + 2 < 20) y = y + 2; for (i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; } } } break; case 180: { if (x - 2 >= 1) x = x - 2; for (i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; } } } break; case 270: { if (y - 2 >= 1) y = y - 2; for (i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; } } } break; case 0: { if (x + 2 <= 19) x = x + 2; for (i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; } } } } break; if (origin.field[x][y] == 4 && j > 1) { Freeinvga(data); } } case 'M': { while (multi) { switch (rot) { case 90: { if (origin.field[x][y + 1] != 1 && (origin.field[x][y] == origin.field[x][y + 2] || origin.field[x][y] == 4 || origin.field[x][y + 2] == 4) && ((y + 2) < 20) && ((y + 2) != AP.y || x != AP.x)) { y = y + 2; for (i = 1; i <= 24; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; cout << "Found sample" << endl; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; multi = false; } } } else { multi = false; } } break; case 180: { if (origin.field[x - 1][y] != 1 && (origin.field[x][y] == origin.field[x - 2][y + 2] || origin.field[x][y] == 4 || origin.field[x - 2][y] == 4) && ((x - 2) > 0) && ((x - 2) != AP.x || y != AP.y)) { x = x - 2; for (int i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; multi = false; } } } else { multi = false; } } break; case 270: { if (origin.field[x][y - 1] != 1 && (origin.field[x][y] == origin.field[x][y - 2] || origin.field[x][y] == 4 || origin.field[x][y - 2] == 4) && ((y - 2) > 0) && ((y - 2) != AP.y || x != AP.x)) { y = y - 2; for (int i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; multi = false; } } } else multi = false; } break; case 0: { if (origin.field[x + 1][y] != 1 && (origin.field[x][y] == origin.field[x + 2][y] || origin.field[x][y] == 4 || origin.field[x + 2][y] == 4) && ((x + 2) < 20) && ((x + 2) != AP.x || y != AP.y)) { x = x - 2; for (int i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; multi = false; } } } else { multi = false; } } break; } } cout << origin.field[x][y]<<"---1---"<< endl; if (origin.field[x][y] == 4 && j > 1) { Freeinvga(data); } } break; case 'B': { rot = rot - 180; if (rot == -90) { rot = 270; } if (rot == -180) { rot = abs(rot); } cout << rot<<"---"<<endl; } break; case 'R': { rot = rot - 90; if (rot == -90) rot = 270; } break; case 'L': { rot = rot + 90; if (rot == 360) rot = 0; } break; } } } void Freeinvga(Ind_data data) { cout << "!!--!!" << endl; int i = 1,count = 0,l = 1; for (i; i <= j - 1; i++) { for (l; l < 9; l++) { if (inv[i] == data.nbank[l]) count++; } if(count == 0) { score = score + 2; data.nbank[inv[i]] = inv[i]; } else {score++;} count = 0; } j = 1; for (i = 1; i < 4; i++) { inv[i] = 0; } } void finalpose() { cout << "Final position is(for x) " << (x- 1)/ 2 << endl; cout << "Final position is(for y) " << (y - 1) / 2 << endl; cout << "Score " << score << endl; cout << "samples on the board " << j - 1 << endl; } }; void eAP::MOVE(Ind_data data, base origin, eAI& AI) { int k, i = 0; int d = 0; bool multi = true; cout << "round" << data.hod << endl; data.proc = ""; if (data.hod != 0) { cin >> data.move; } k = data.move.length(); if (data.move.length() + data.total > 420) { k = (data.move.length() + data.total) - 420; } for (int i = 0; i < k; i++) { switch (data.move[i]) { case 'S': { if (sb > 0) { data.proc = data.proc + data.move[i]; sb--; } } break; case 'J': { if (jb > 0) { data.proc = data.proc + data.move[i]; jb--; } } break; case 'M': { if (mb > 0) { data.proc = data.proc + data.move[i]; mb--; } } break; case 'B': { if (bb > 0) { data.proc = data.proc + data.move[i]; bb--; } } break; case 'R': { if (rb > 0) { data.proc = data.proc + data.move[i]; rb--; } } break; case 'L': { if (lb > 0) { data.proc = data.proc + data.move[i]; lb--; } } break; } } for (int r = 0; r < data.proc.length(); r++) { multi = true; switch (data.proc[r]) { case 'S': { switch (rot) { case 90: { if (origin.field[x][y + 1] != 1 && (origin.field[x][y] == origin.field[x][y + 2] || origin.field[x][y] == 4 || origin.field[x][y + 2] == 4) && ((y + 2) < 20) && ((y + 2) != AI.y || x != AI.x)) { y = y + 2; for (int i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 60; origin.ysa[i] = i + 60; cout << "Found sample" << endl; } } } } break; case 180: { if (origin.field[x - 1][y] != 1 && (origin.field[x][y] == origin.field[x - 2][y + 2] || origin.field[x][y] == 4 || origin.field[x - 2][y] == 4) && ((x - 2) > 0) && (x - 2) != AI.x || y != AI.y) x = x - 2; for (int i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 60; origin.ysa[i] = i + 60; cout << "Found sample" << endl; } } } break; case 270: { if (origin.field[x][y - 1] != 1 && (origin.field[x][y] == origin.field[x][y - 2] || origin.field[x][y] == 4 || origin.field[x][y - 2] == 4) && ((y - 2) > 0) && (y - 2) != AI.y || x != AI.x) y = y - 2; for (int i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; cout << "Found sample" << endl; } } } break; case 0: { if (origin.field[x + 1][y] != 1 && (origin.field[x][y] == origin.field[x + 2][y] || origin.field[x][y] == 4 || origin.field[x + 2][y] == 4) && ((x + 2) < 20) && (x + 2) != AI.x || y != AI.y) x = x + 2; for (int i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; cout << "Found sample" << endl; } } } break; } if (origin.field[x][y] == 4 && j > 1) { Freeinvga(data); } } break; case 'J': { switch (rot) { case 90: { if (y + 2 < 20) y = y + 2; for (i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; cout << "Found sample" << endl; } } } break; case 180: { if (x - 2 >= 1) x = x - 2; for (i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; cout << "Found sample" << endl; } } } break; case 270: { if (y - 2 >= 1) y = y - 2; for (i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; cout << "Found sample" << endl; } } } break; case 0: { if (x + 2 <= 19) x = x + 2; for (i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; cout << "Found sample" << endl; } } } } break; if (origin.field[x][y] == 4 && j > 1) { Freeinvga(data); } } case 'M': { while (multi) { switch (rot) { case 90: { if (origin.field[x][y + 1] != 1 && (origin.field[x][y] == origin.field[x][y + 2] || origin.field[x][y] == 4 || origin.field[x][y + 2] == 4) && ((y + 2) < 20) && ((y + 2) != AI.y || x != AI.x)) { y = y + 2; for (i = 1; i <= 24; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; cout << "Found sample" << endl; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; multi = false; } } } else { multi = false; } } break; case 180: { if (origin.field[x - 1][y] != 1 && (origin.field[x][y] == origin.field[x - 2][y + 2] || origin.field[x][y] == 4 || origin.field[x - 2][y] == 4) && ((x - 2) > 0) && ((x - 2) != AI.x || y != AI.y)) { x = x - 2; for (int i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; cout << "Found sample" << endl; multi = false; } } } else { multi = false; } } break; case 270: { if (origin.field[x][y - 1] != 1 && (origin.field[x][y] == origin.field[x][y - 2] || origin.field[x][y] == 4 || origin.field[x][y - 2] == 4) && ((y - 2) > 0) && ((y - 2) != AI.y || x != AI.x)) { y = y - 2; for (int i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; cout << "Found sample" << endl; multi = false; } } } else multi = false; } break; case 0: { if (origin.field[x + 1][y] != 1 && (origin.field[x][y] == origin.field[x + 2][y] || origin.field[x][y] == 4 || origin.field[x + 2][y] == 4) && ((x + 2) < 20) && ((x + 2) != AI.x || y != AI.y)) { x = x - 2; for (int i = 1; i < 25; i++) { if (x == origin.xsa[i] && y == origin.ysa[i] && j <= 3) { inv[j] = origin.lis[i]; j++; origin.xsa[i] = i + 99; origin.ysa[i] = i + 99; cout << "Found sample" << endl; multi = false; } } } else { multi = false; } } break; } } cout << origin.field[x][y] << "---1---" << endl; if (origin.field[x][y] == 4 && j > 1) { Freeinvga(data); } } break; case 'B': { rot = rot - 180; if (rot == -90) { rot = 270; } if (rot == -180) { rot = abs(rot); } cout << rot << "---" << endl; } break; case 'R': { rot = rot - 90; if (rot == -90) rot = 270; } break; case 'L': { rot = rot + 90; if (rot == 360) rot = 0; } break; } } } int main() { base origin; eAI AI; eAP AP; Ind_data data; string st; int k; int j = 0; int i; bool multi = true; AI.iniinv(); AP.iniinv(); origin.Mat(); origin.WMLS(); cin >> st; if (st[0] == '0') { AI.x = 1; AI.y = 1; AP.x = 19; AP.y = 1; cin >> data.move; data.hod = 0; } else { AI.x = 1; AI.y = 19; AP.x = 1; AP.y = 1; data.move = st; data.hod = 1; } cout << data.move; while ((data.total <= 420) && (data.lsbank > 0)) { printline(); if (data.hod % 2 == 0) { data.hod++; AI.MOVE(data, origin, AP); AI.finalpose(); } else { data.hod++; AP.MOVE(data, origin, AI); AP.finalpose(); } } origin.Freemat(); AI.Freeinv(); return 0; }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue