#include <iostream> #include <vector> enum DIR { DOWN = 0x80, LEFT_DOWN = 0x40, LEFT = 0x8, LEFT_UP = 0x1, UP = 0x2, RIGHT_UP = 0x4, RIGHT = 0x20, RIGHT_DOWN = 0x100 }; char caesar(char input, int shift) { return (input + shift) % ('Z' + 1) + 'A'; } std::string getLetter(int let) { char out [9][9]; for(int i = 0; i < 9; i++) { for(int j = 0; j < 9; j++) { out[i][j] = '.'; } } out[4][4] = '*'; short x_add = 0; short y_add = 0; short pos_x = 4; short pos_y = 4; for(DIR dir: {DOWN, UP, RIGHT, LEFT, RIGHT_DOWN, RIGHT_UP, LEFT_DOWN, LEFT_UP}) { if((let & dir) == dir) { switch(dir) { case DOWN: y_add = -1; break; case UP: y_add = 1; break; case LEFT: x_add = 1; break; case RIGHT: x_add = -1; break; case RIGHT_DOWN: x_add = -1; y_add = -1; break; case RIGHT_UP: x_add = -1; y_add = 1; break; case LEFT_DOWN: x_add = 1; y_add = -1; break; case LEFT_UP: x_add = 1; y_add = 1; break; } pos_x = 4; pos_y = 4; for(int i = 0; i < 3; ++i) { pos_x += x_add; pos_y += y_add; out[pos_x][pos_y] = '#'; } x_add = 0; y_add = 0; } } for(int i = 0; i < 3; ++i) { pos_x += x_add; pos_y += y_add; out[pos_x][pos_y] = '#'; } std::string outS; for(int i = 8; i >= 0; i--) { for(int j = 8; j >= 0; j--) { outS += out[j][i]; } if(i != 0) outS += '\n'; } return outS; } int main() { int numlet; int shift; int base_size = 8; short base_semaphore[] = { {0x80}, // down {0x40}, // left down {0x20}, // left {0x8}, // left up {0x4}, // up {0x2}, // up right {0x1}, // right {0x100} // right dpwm }; int alphabet[26] = { DOWN | LEFT_DOWN, DOWN | LEFT, DOWN | LEFT_UP, DOWN | UP, DOWN | RIGHT_UP, DOWN | RIGHT, DOWN | RIGHT_DOWN, LEFT_DOWN | LEFT, LEFT_DOWN | LEFT_UP, UP | RIGHT, // J LEFT_DOWN | UP, LEFT_DOWN | RIGHT_UP, LEFT_DOWN | RIGHT, LEFT_DOWN | RIGHT_DOWN, LEFT | LEFT_UP, // O LEFT | UP, LEFT | RIGHT_UP, LEFT | RIGHT, // R LEFT | RIGHT_DOWN, LEFT_UP | UP, LEFT_UP | RIGHT_UP, UP | RIGHT_DOWN, RIGHT_UP | RIGHT, RIGHT_UP | RIGHT_DOWN, LEFT_UP | RIGHT, RIGHT | RIGHT_DOWN }; if(scanf("%d %d", &numlet, &shift) != 2) std::cout<<"the what now"<<std::endl; int a; std::string tmp; /*for (int i = 0; i < base_size; ++i) { for (int j = i + 1; j < base_size - 1; ++j) { if (i * 7 + j < 'j' - 'a') { alphabet[i + j - 1] = base_semaphore[i] | base_semaphore[j]; } if(i * 7 + j > 'j' - 'a') { alphabet[i + j + 1] = base_semaphore[i] | base_semaphore[j]; } } }*/ std::vector<int> lets; for(int m = 0; m < numlet; ++m) { a = 0; int j = 0; for(int i = 0; i < 9; i++) { std::cin >> tmp; if(i > 2 && i < 6) { //std::cout << tmp.substr(3, 3) << std::endl; for (char c : tmp.substr(3, 3)) { a |= ((c == '#') << (j++)); } } } lets.push_back(a); //std::cout << "a: " << a << std::endl; //std::cout << std::endl; } // std::cout << "numlet: " << numlet << std::endl; // for(int el: lets) // std::cout << el << std::endl; std::vector<int> out; for(int letter: lets) { for(int i = 0; i < 26; i++) { if(letter == alphabet[i]) { out.push_back(alphabet[(i + shift) % 26]); } } } // std::cout<<"out: "<<std::endl; // for(int el: out) // std::cout << el << std::endl; // std::cout << "alp"; // for(int j : alphabet) // std::cout << j << ", "; for(int el: out) { std::cout << getLetter(el) << std::endl; //std::cout << std::endl; } return 0; }