# Checking for 2D Array Rotations + Reflections

I have created a code that will classify a 2D array rotation / reflection into one of these categories →

#1: The arrangement is rotated 90 degrees clockwise.

#2: The arrangement is rotated 180 degrees clockwise.

#3: The arrangement is rotated 270 degrees clockwise.

#4: The arrangement is reflected horizontally (see the sample input).

#5: The arrangement is reflected horizontally and then one of actions #1 to #3 is performed.

#6: No change.

#7: None of the above.

Unfortunately, some of the test cases I have inputted are giving me the wrong answers. Will anyone please help me understand what I did wrong in my code?

The first line of any input contains a single integer ‘N’. The next N lines contain a string of N characters that represent the original arrangement of the array. The final N lines each contain a string of N characters that represent the rearrangement of the array.

For example, the input below is supposed to give me ‘5’ →

``````5
-@@@-
-@@--
-@---
-----
-----
-----
----@
---@@
--@@@
-----
``````

but my current code is giving me ‘3’.

The input below is supposed to give me ‘1’ →

``````6
-@-@-@
@-@-@-
-@-@-@
@-@-@-
-@-@-@
@-@-@-
@-@-@-
-@-@-@
@-@-@-
-@-@-@
@-@-@-
-@-@-@
``````

but my code is currently giving me 5.

Here is my full code, annotated with some of the comments I have made →

``````# include <iostream>
using namespace std;

// Strategy ->
// 1. Go over all the possible solutions IN ORDER + stop at the one that corresponds to the current input
// 2. Print out the number of the solution

int main() {
char a;
char b;

char input;
int N, output = 7;
cin >> N;

// Take in the inputs for the original grid
for(int i = 0; i < N; i ++) {
for(int j = 0; j < N; j ++) {
cin >> input;
a[i][j] = input;
}
}

// Take in the inputs for the changed grid
for(int i = 0; i < N; i ++) {
for(int j = 0; j < N; j ++) {
cin >> input;
b[i][j] = input;
}
}

// The output variable is originally set to "none of the above" (number 7)
// Go through all of the "if" statements below to see if the grids match any of the other cases

// 1. 90 degrees clockwise
bool trueCase = true;
for(int i = 0; i < N; i ++) {
for(int j = 0; j < N; j ++) {
if(b[i][j] != a[N - j - 1][i]) {
trueCase = false;
}
}
}

if(trueCase) {
output = 1;
}

// 2. 180 degrees clockwise
trueCase = true;
for(int i = 0; i < N; i ++) {
for(int j = 0; j < N; j ++) {
if(b[i][j] != a[N - 1 - i][N - 1 - j]) {
trueCase = false;
}
}
}

if(trueCase) {
output = 2;
}

// 3. 270 degrees clockwise
trueCase = true;
for(int i = 0; i < N; i ++) {
for(int j = 0; j < N; j ++) {
if(b[i][j] != a[N - j - 1][N - i - 1]) {
trueCase = false;
}
}
}

if(trueCase) {
output = 3;
}

// 4. Reflected horizontally
trueCase = true;
for(int i = 0; i < N; i ++) {
for(int j = 0; j < N; j ++) {
if(b[i][j] != a[i][N - j - 1]) {
trueCase = false;
}
}
}

// If there is horizontal reflection + one of the actions #1 to #3 is performed, set "output" to 5
// If there is just a horizontal reflection and nothing more, set "output" to 4

if(trueCase && (output == 1 || output == 2 || output == 3)) {
output = 5;
} else if (trueCase) {
output = 4;
}

// 6. No change
trueCase = true;
for(int i = 0; i < N; i ++) {
for(int j = 0; j < N; j ++) {
if(b[i][j] != a[i][j]) {
trueCase = false;
}
}
}

if(trueCase) {
output = 6;
}

cout << output << endl;

return 0;
}
``````