borovaneca

Armory

Jun 7th, 2023
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.43 KB | None | 0 0
  1. package Advance.Exams.RetakeExam13April2022;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class Armory {
  6.     private static final char OFFICER = 'A';
  7.     private static final char MIRROR = 'M';
  8.     private static final char EMPTY_SPOT = '-';
  9.  
  10.     public static void main(String[] args) {
  11.         Scanner scanner = new Scanner(System.in);
  12.  
  13.  
  14.         char[][] field = new char[Integer.parseInt(scanner.nextLine())][];
  15.         for (int i = 0; i < field.length; i++) {
  16.             field[i] = scanner.nextLine().toCharArray();
  17.         }
  18.  
  19.         int[] currentPosition = getPosition(field);
  20.  
  21.         String command;
  22.         boolean out = false;
  23.         int swordPrices = 0;
  24.         while (!out && swordPrices < 65 && !"END".equals(command = scanner.nextLine())) {
  25.  
  26.             switch (command) {
  27.                 case "up":
  28.                     if (currentPosition[0] - 1 < 0) {
  29.                         field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
  30.                         out = true;
  31.                         break;
  32.                     }
  33.                     if (Character.isDigit(field[currentPosition[0] - 1][currentPosition[1]])) {
  34.                         swordPrices += Integer.parseInt(String.valueOf(field[currentPosition[0] - 1][currentPosition[1]]));
  35.                         field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
  36.                         field[currentPosition[0] -1][currentPosition[1]] = OFFICER;
  37.                         currentPosition[0] = currentPosition[0] -1;
  38.                     } else if (field[currentPosition[0] - 1][currentPosition[1]] == MIRROR) {
  39.                         field[currentPosition[0] - 1][currentPosition[1]] = EMPTY_SPOT;
  40.                         int[] mirrorPosition = getMirrorPosition(field);
  41.                         field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
  42.                         field[currentPosition[0] - 1][currentPosition[1]] = EMPTY_SPOT;
  43.                         field[mirrorPosition[0]][mirrorPosition[1]] = OFFICER;
  44.                         currentPosition = getPosition(field);
  45.                     } else {
  46.                         field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
  47.                         field[currentPosition[0] - 1][currentPosition[1]] = OFFICER;
  48.                         currentPosition[0] = currentPosition[0] - 1;
  49.                     }
  50.                     break;
  51.                 case "down":
  52.                     if (currentPosition[0] + 1 > field.length - 1) {
  53.                         field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
  54.                         out = true;
  55.                         break;
  56.                     }
  57.                     if (Character.isDigit(field[currentPosition[0] + 1][currentPosition[1]])) {
  58.                         swordPrices += Integer.parseInt(String.valueOf(field[currentPosition[0] + 1][currentPosition[1]]));
  59.                         field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
  60.                         field[currentPosition[0] + 1][currentPosition[1]] = OFFICER;
  61.                         currentPosition[0] = currentPosition[0] + 1;
  62.                     } else if (field[currentPosition[0] + 1][currentPosition[1]] == MIRROR) {
  63.                         field[currentPosition[0] + 1][currentPosition[1]] = EMPTY_SPOT;
  64.                         int[] mirrorPosition = getMirrorPosition(field);
  65.                         field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
  66.                         field[currentPosition[0] + 1][currentPosition[1]] = EMPTY_SPOT;
  67.                         field[mirrorPosition[0]][mirrorPosition[1]] = OFFICER;
  68.                         currentPosition = getPosition(field);
  69.                     } else {
  70.                         field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
  71.                         field[currentPosition[0] + 1][currentPosition[1]] = OFFICER;
  72.                         currentPosition[0] = currentPosition[0] + 1;
  73.                     }
  74.                     break;
  75.                 case "right":
  76.                     if (currentPosition[1] + 1 > field.length - 1) {
  77.                         field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
  78.                         out = true;
  79.                         break;
  80.                     }
  81.                     if (Character.isDigit(field[currentPosition[0]][currentPosition[1] + 1])) {
  82.                         swordPrices += Integer.parseInt(String.valueOf(field[currentPosition[0]][currentPosition[1] + 1]));
  83.                         field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
  84.                         field[currentPosition[0]][currentPosition[1] + 1] = OFFICER;
  85.                         currentPosition[1] = currentPosition[1] + 1;
  86.  
  87.                     } else if (field[currentPosition[0]][currentPosition[1] + 1] == MIRROR) {
  88.                         field[currentPosition[0]][currentPosition[1] + 1] = EMPTY_SPOT;
  89.                         int[] mirrorPosition = getMirrorPosition(field);
  90.                         field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
  91.                         field[currentPosition[0]][currentPosition[1] + 1] = EMPTY_SPOT;
  92.                         field[mirrorPosition[0]][mirrorPosition[1]] = OFFICER;
  93.                         currentPosition = getPosition(field);
  94.                     } else {
  95.                         field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
  96.                         field[currentPosition[0]][currentPosition[1] + 1] = OFFICER;
  97.                         currentPosition[1] = currentPosition[1] + 1;
  98.                     }
  99.                     break;
  100.                 case "left":
  101.                     if (currentPosition[1] - 1 < 0) {
  102.                         out = true;
  103.                         field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
  104.                         break;
  105.                     }
  106.                     if (Character.isDigit(field[currentPosition[0]][currentPosition[1] - 1])) {
  107.                         swordPrices += Integer.parseInt(String.valueOf(field[currentPosition[0]][currentPosition[1] - 1]));
  108.                         field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
  109.                         field[currentPosition[0]][currentPosition[1] - 1] = OFFICER;
  110.                         currentPosition[1] = currentPosition[1] - 1;
  111.                     } else if (field[currentPosition[0]][currentPosition[1] - 1] == MIRROR) {
  112.                         field[currentPosition[0]][currentPosition[1] - 1] = EMPTY_SPOT;
  113.                         int[] mirrorPosition = getMirrorPosition(field);
  114.                         field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
  115.                         field[currentPosition[0]][currentPosition[1] - 1] = EMPTY_SPOT;
  116.                         field[mirrorPosition[0]][mirrorPosition[1]] = OFFICER;
  117.                         currentPosition = getPosition(field);
  118.                     } else {
  119.                         field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
  120.                         field[currentPosition[0]][currentPosition[1] - 1] = OFFICER;
  121.                         currentPosition[1] = currentPosition[1] - 1;
  122.                     }
  123.                     break;
  124.             }
  125.         }
  126.         if (out) {
  127.             System.out.println("I do not need more swords!");
  128.         } else if (swordPrices >= 65) {
  129.             System.out.println("Very nice swords, I will come back for more!");
  130.         }
  131.         System.out.printf("The king paid %d gold coins.\n", swordPrices);
  132.         for (char[] chars : field) {
  133.             for (char aChar : chars) {
  134.                 System.out.print(aChar);
  135.             }
  136.             System.out.println();
  137.         }
  138.     }
  139.  
  140.     private static int[] getMirrorPosition(char[][] field) {
  141.         int[] temporary = new int[2];
  142.         for (int row = 0; row < field.length; row++) {
  143.             for (int col = 0; col < field[row].length; col++) {
  144.                 if (field[row][col] == MIRROR) {
  145.                     temporary[0] = row;
  146.                     temporary[1] = col;
  147.                 }
  148.             }
  149.         }
  150.         return temporary;
  151.     }
  152.  
  153.     private static int[] getPosition(char[][] field) {
  154.         for (int row = 0; row < field.length; row++) {
  155.             for (int col = 0; col < field[row].length; col++) {
  156.                 if (field[row][col] == OFFICER) {
  157.                     return new int[] {row, col};
  158.                 }
  159.             }
  160.         }
  161.         return new int[] {1, 2};
  162.     }
  163. }
  164.  
Advertisement
Add Comment
Please, Sign In to add comment