/* * File: main.c11 * Author: cteam037 * * Created on October 22, 2016, 11:58 AM */ #include #include using namespace std; typedef char** (*f)(int(*)[100], int); int SIMPLE[8][6] = { {6, 7, 4, 5, 3, 2}, {7, 6, 5, 4, 2, 3}, {5, 4, 7, 6, 1, 0}, {4, 5, 6, 7, 0, 1}, {2, 3, 0, 1, 7, 6}, {3, 2, 1, 0, 6, 7}, {1, 0, 3, 2, 5, 4}, {0, 1, 2, 3, 4, 5} }; char TRANSFORM[8][10] = {{'v', '^', '|', '-', '/', '\\', 'o', 'x', '<', '>'}, {'^', 'v', '|', '-', '/', '\\', 'o', 'x', '>', '<'}, {'<', '>', '-', '|', '/', '\\', 'o', 'x', 'v', '^'}, {'>', '<', '-', '|', '/', '\\', 'o', 'x', '^', 'v'}, {'^', 'v', '|', '-', '\\', '/', 'o', 'x', '<', '>'}, {'v', '^', '|', '-', '\\', '/', 'o', 'x', '>', '<'}, {'>', '<', '-', '|', '\\', '/', 'o', 'x', 'v', '^'}, {'<', '>', '-', '|', '\\', '/', 'o', 'x', '^', 'v'}}; int index(char ch) { switch (ch) { case '<': return 0; case '>': return 1; case '-': return 2; case '|': return 3; case '\\': return 4; case '/': return 5; case 'o': return 6; case 'x': return 7; case '^': return 8; case 'v': return 9; } return -1; } char** rotateLeft(int board[100][100], int size) { char** arr = new char*[size]; for (int i = 0; i < size; ++i) { arr[i] = new char[size]; } for (int i = 0; i < size; ++i) { for (int j = 0; j < size; ++j) { arr[size - j - 1][i] = TRANSFORM[0][board[i][j]]; } } return arr; } char** rotateRight(int board[100][100], int size) { char** arr = new char*[size]; for (int i = 0; i < size; ++i) { arr[i] = new char[size]; } for (int i = 0; i < size; ++i) { for (int j = 0; j < size; ++j) { arr[j][size - i - 1] = TRANSFORM[1][board[i][j]]; } } return arr; } char** flipH(int board[100][100], int size) { char** arr = new char*[size]; for (int i = 0; i < size; ++i) { arr[i] = new char[size]; } for (int i = 0; i < size; ++i) { for (int j = 0; j < size; ++j) { arr[size - i - 1][j] = TRANSFORM[2][board[i][j]]; } } return arr; } char** flipV(int board[100][100], int size) { char** arr = new char*[size]; for (int i = 0; i < size; ++i) { arr[i] = new char[size]; } for (int i = 0; i < size; ++i) { for (int j = 0; j < size; ++j) { arr[i][size - j - 1] = TRANSFORM[3][board[i][j]]; } } return arr; } char** flipD(int board[100][100], int size) { char** arr = new char*[size]; for (int i = 0; i < size; ++i) { arr[i] = new char[size]; } for (int i = 0; i < size; ++i) { for (int j = 0; j < size; ++j) { arr[j][i] = TRANSFORM[4][board[i][j]]; } } return arr; } char** flipD2(int board[100][100], int size) { char** arr = new char*[size]; for (int i = 0; i < size; ++i) { arr[i] = new char[size]; } for (int i = 0; i < size; ++i) { for (int j = 0; j < size; ++j) { arr[size - j - 1][size - i - 1] = TRANSFORM[5][board[i][j]]; } } return arr; } char** flipP(int board[100][100], int size) { char** arr = new char*[size]; for (int i = 0; i < size; ++i) { arr[i] = new char[size]; } for (int i = 0; i < size; ++i) { for (int j = 0; j < size; ++j) { arr[size - i - 1][size - j - 1] = TRANSFORM[6][board[i][j]]; } } return arr; } char** none(int board[100][100], int size) { char** arr = new char*[size]; for (int i = 0; i < size; ++i) { arr[i] = new char[size]; } for (int i = 0; i < size; ++i) { for (int j = 0; j < size; ++j) { arr[i][j] = TRANSFORM[7][board[i][j]]; } } return arr; } f FUNCTION[8] = {rotateLeft, rotateRight, flipH, flipV, flipD, flipD2, flipP, none}; /* * */ int main(int argc, char** argv) { int size, i, j, op; int board[100][100]; char temp; string line; while (cin >> size) { for (i = 0; i < size; ++i) { for (j = 0; j < size; ++j) { cin >> temp; board[i][j] = index(temp); } } getline(cin, line); getline(cin, line); op = 7; for (i = 0; i < line.size(); ++++i) { op = SIMPLE[op][index(line.at(i))]; } char ** res = FUNCTION[op](board, size); for (i = 0; i < size; ++i) { cout.write(res[i], size); cout << endl; } } return 0; }