Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Advance.Exams.RetakeExam13April2022;
- import java.util.Scanner;
- public class Armory {
- private static final char OFFICER = 'A';
- private static final char MIRROR = 'M';
- private static final char EMPTY_SPOT = '-';
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- char[][] field = new char[Integer.parseInt(scanner.nextLine())][];
- for (int i = 0; i < field.length; i++) {
- field[i] = scanner.nextLine().toCharArray();
- }
- int[] currentPosition = getPosition(field);
- String command;
- boolean out = false;
- int swordPrices = 0;
- while (!out && swordPrices < 65 && !"END".equals(command = scanner.nextLine())) {
- switch (command) {
- case "up":
- if (currentPosition[0] - 1 < 0) {
- field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
- out = true;
- break;
- }
- if (Character.isDigit(field[currentPosition[0] - 1][currentPosition[1]])) {
- swordPrices += Integer.parseInt(String.valueOf(field[currentPosition[0] - 1][currentPosition[1]]));
- field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
- field[currentPosition[0] -1][currentPosition[1]] = OFFICER;
- currentPosition[0] = currentPosition[0] -1;
- } else if (field[currentPosition[0] - 1][currentPosition[1]] == MIRROR) {
- field[currentPosition[0] - 1][currentPosition[1]] = EMPTY_SPOT;
- int[] mirrorPosition = getMirrorPosition(field);
- field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
- field[currentPosition[0] - 1][currentPosition[1]] = EMPTY_SPOT;
- field[mirrorPosition[0]][mirrorPosition[1]] = OFFICER;
- currentPosition = getPosition(field);
- } else {
- field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
- field[currentPosition[0] - 1][currentPosition[1]] = OFFICER;
- currentPosition[0] = currentPosition[0] - 1;
- }
- break;
- case "down":
- if (currentPosition[0] + 1 > field.length - 1) {
- field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
- out = true;
- break;
- }
- if (Character.isDigit(field[currentPosition[0] + 1][currentPosition[1]])) {
- swordPrices += Integer.parseInt(String.valueOf(field[currentPosition[0] + 1][currentPosition[1]]));
- field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
- field[currentPosition[0] + 1][currentPosition[1]] = OFFICER;
- currentPosition[0] = currentPosition[0] + 1;
- } else if (field[currentPosition[0] + 1][currentPosition[1]] == MIRROR) {
- field[currentPosition[0] + 1][currentPosition[1]] = EMPTY_SPOT;
- int[] mirrorPosition = getMirrorPosition(field);
- field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
- field[currentPosition[0] + 1][currentPosition[1]] = EMPTY_SPOT;
- field[mirrorPosition[0]][mirrorPosition[1]] = OFFICER;
- currentPosition = getPosition(field);
- } else {
- field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
- field[currentPosition[0] + 1][currentPosition[1]] = OFFICER;
- currentPosition[0] = currentPosition[0] + 1;
- }
- break;
- case "right":
- if (currentPosition[1] + 1 > field.length - 1) {
- field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
- out = true;
- break;
- }
- if (Character.isDigit(field[currentPosition[0]][currentPosition[1] + 1])) {
- swordPrices += Integer.parseInt(String.valueOf(field[currentPosition[0]][currentPosition[1] + 1]));
- field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
- field[currentPosition[0]][currentPosition[1] + 1] = OFFICER;
- currentPosition[1] = currentPosition[1] + 1;
- } else if (field[currentPosition[0]][currentPosition[1] + 1] == MIRROR) {
- field[currentPosition[0]][currentPosition[1] + 1] = EMPTY_SPOT;
- int[] mirrorPosition = getMirrorPosition(field);
- field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
- field[currentPosition[0]][currentPosition[1] + 1] = EMPTY_SPOT;
- field[mirrorPosition[0]][mirrorPosition[1]] = OFFICER;
- currentPosition = getPosition(field);
- } else {
- field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
- field[currentPosition[0]][currentPosition[1] + 1] = OFFICER;
- currentPosition[1] = currentPosition[1] + 1;
- }
- break;
- case "left":
- if (currentPosition[1] - 1 < 0) {
- out = true;
- field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
- break;
- }
- if (Character.isDigit(field[currentPosition[0]][currentPosition[1] - 1])) {
- swordPrices += Integer.parseInt(String.valueOf(field[currentPosition[0]][currentPosition[1] - 1]));
- field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
- field[currentPosition[0]][currentPosition[1] - 1] = OFFICER;
- currentPosition[1] = currentPosition[1] - 1;
- } else if (field[currentPosition[0]][currentPosition[1] - 1] == MIRROR) {
- field[currentPosition[0]][currentPosition[1] - 1] = EMPTY_SPOT;
- int[] mirrorPosition = getMirrorPosition(field);
- field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
- field[currentPosition[0]][currentPosition[1] - 1] = EMPTY_SPOT;
- field[mirrorPosition[0]][mirrorPosition[1]] = OFFICER;
- currentPosition = getPosition(field);
- } else {
- field[currentPosition[0]][currentPosition[1]] = EMPTY_SPOT;
- field[currentPosition[0]][currentPosition[1] - 1] = OFFICER;
- currentPosition[1] = currentPosition[1] - 1;
- }
- break;
- }
- }
- if (out) {
- System.out.println("I do not need more swords!");
- } else if (swordPrices >= 65) {
- System.out.println("Very nice swords, I will come back for more!");
- }
- System.out.printf("The king paid %d gold coins.\n", swordPrices);
- for (char[] chars : field) {
- for (char aChar : chars) {
- System.out.print(aChar);
- }
- System.out.println();
- }
- }
- private static int[] getMirrorPosition(char[][] field) {
- int[] temporary = new int[2];
- for (int row = 0; row < field.length; row++) {
- for (int col = 0; col < field[row].length; col++) {
- if (field[row][col] == MIRROR) {
- temporary[0] = row;
- temporary[1] = col;
- }
- }
- }
- return temporary;
- }
- private static int[] getPosition(char[][] field) {
- for (int row = 0; row < field.length; row++) {
- for (int col = 0; col < field[row].length; col++) {
- if (field[row][col] == OFFICER) {
- return new int[] {row, col};
- }
- }
- }
- return new int[] {1, 2};
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment