fork download
  1. import java.util.Scanner;
  2. import java.util.Map;
  3. import java.util.HashMap;
  4. class MirrorEncryption {
  5. public static char followPath(char[][] field, char c) {
  6. if ('a' <= c && c <= 'm') {
  7. return followPath(field, c - 'a', -1, 0, 1);
  8. }
  9. if ('n' <= c && c <= 'z') {
  10. return followPath(field, 13, c - 'n', -1, 0);
  11. }
  12. if ('A' <= c && c <= 'M') {
  13. return followPath(field, -1, c - 'A', 1, 0);
  14. }
  15. if ('N' <= c && c <= 'Z') {
  16. return followPath(field, c - 'N', 13, 0, -1);
  17. }
  18. throw new IllegalArgumentException("Invalid character in word.");
  19. }
  20. public static char followPath(char[][] field, int x, int y, int dx, int dy) {
  21. if (y + dy <= -1) {
  22. return (char) ('a' + x + dx);
  23. } else if (x + dx >= 13) {
  24. return (char) ('n' + y + dy);
  25. } else if (x + dx <= -1) {
  26. return (char) ('A' + y + dy);
  27. } else if (y + dy >= 13) {
  28. return (char) ('N' + x + dx);
  29. } else {
  30. switch (field[x + dx][y + dy]) {
  31. case ' ':
  32. return followPath(field, x + dx, y + dy, dx, dy);
  33. case '\\':
  34. return followPath(field, x + dx, y + dy, dy, dx);
  35. case '/':
  36. return followPath(field, x + dx, y + dy, -dy, -dx);
  37. default:
  38. throw new IllegalArgumentException("Invalid character in field.");
  39. }
  40. }
  41. }
  42. public static void main(String[] args) {
  43. Scanner scanner = new Scanner(System.in);
  44. char[][] field = new char[13][13];
  45. for (int y = 0; y < 13; y++) {
  46. String line = scanner.nextLine();
  47. for (int x = 0; x < 13; x++) {
  48. field[x][y] = line.charAt(x);
  49. }
  50. }
  51. String word = scanner.nextLine();
  52. Map<Character,Character> encryption = new HashMap<>();
  53. for (int i = 0; i < 26; i++) {
  54. encryption.put((char) ('a' + i), followPath(field, (char) ('a' + i)));
  55. encryption.put((char) ('A' + i), followPath(field, (char) ('A' + i)));
  56. }
  57. for (char c : word.toCharArray()) {
  58. System.out.print(encryption.get(c));
  59. }
  60. System.out.println();
  61. }
  62. }
Success #stdin #stdout 0.16s 321344KB
stdin
   \\  /\    
            \
   /         
      \     \
    \        
  /      /   
\  /      \  
     \       
\/           
/            
          \  
    \/       
   /       / 
TpmQSjdmZdpoohd
stdout
DaolyProgrammer