daily pastebin goal
20%
SHARE
TWEET

Untitled

a guest Jan 23rd, 2019 62 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4.  
  5. public class TheHeiganDance {
  6.  
  7.     private static final String CLOUD_SPELL = "Cloud";
  8.     private static final int CLOUD_SPELL_DMG = 3500;
  9.     private static final String ERUPTION_SPELL = "Eruption";
  10.     private static final int ERUPTION_SPELL_DMG = 6000;
  11.  
  12.     public static void main(String[] args) throws IOException {
  13.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  14.  
  15.         double dmgDealtToBoss = Double.parseDouble(reader.readLine());
  16.  
  17.         int fieldSize = 15;
  18.         int[][] field = new int[fieldSize][fieldSize];
  19.  
  20.         int playerHealth = 18500;
  21.         double bossHealth = 3000000;
  22.  
  23.         int[] playerPosition = new int[2];
  24.  
  25.         playerPosition[0] = 7;
  26.         playerPosition[1] = 7;
  27.  
  28.         boolean cloudIsActive = false;
  29.         boolean heroIsAlive = true;
  30.  
  31.         StringBuilder report;
  32.         StringBuilder bossStatus = new StringBuilder("Heigan: ");
  33.         StringBuilder playerStatus = new StringBuilder("Player: ");
  34.         StringBuilder finalPosition = new StringBuilder("Final position: ");
  35.  
  36.         while (true) {
  37.  
  38.             if (!heroIsAlive) {
  39.                 break;
  40.             }
  41.  
  42.             bossHealth -= dmgDealtToBoss;
  43.  
  44.             if (cloudIsActive) {
  45.                 cloudIsActive = false;
  46.                 playerHealth -= CLOUD_SPELL_DMG;
  47.                 if (playerHealth <= 0) {
  48.                     playerStatus.append("Killed by ").append("Plague ").append(CLOUD_SPELL);
  49.                     finalPosition.append(playerPosition[0]).append(", ").append(playerPosition[1]);
  50.                     if (bossHealth <= 0) {
  51.                         bossStatus.append("Defeated!");
  52.                     }
  53.                     break;
  54.                 }
  55.             }
  56.  
  57.             if (bossHealth <= 0) {
  58.                 bossStatus.append("Defeated!");
  59.                 break;
  60.             }
  61.  
  62.             String[] bossAttackData = reader.readLine().split("\\s+");
  63.             String spell = bossAttackData[0];
  64.             int row = Integer.parseInt(bossAttackData[1]);
  65.             int col = Integer.parseInt(bossAttackData[2]);
  66.  
  67.             switch (spell) {
  68.  
  69.                 case CLOUD_SPELL:
  70.  
  71.                     markAttackedZones(fieldSize, field, row, col, CLOUD_SPELL_DMG);
  72.  
  73.                     if (field[playerPosition[0]][playerPosition[1]] == CLOUD_SPELL_DMG) {
  74.  
  75.                         boolean escaped = tryToEscape(field, playerPosition, playerPosition[0], playerPosition[1]);
  76.  
  77.                         if (!escaped) {
  78.  
  79.                             playerHealth -= CLOUD_SPELL_DMG;
  80.                             cloudIsActive = true;
  81.                             if (playerHealth <= 0) {
  82.                                 playerStatus.append("Killed by ").append("Plague ").append(CLOUD_SPELL);
  83.                                 finalPosition.append(playerPosition[0]).append(", ").append(playerPosition[1]);
  84.                                 heroIsAlive = false;
  85.                             }
  86.                         }
  87.                     }
  88.  
  89.                     clearField(field);
  90.                     break;
  91.                 case ERUPTION_SPELL:
  92.  
  93.                     markAttackedZones(fieldSize, field, row, col, ERUPTION_SPELL_DMG);
  94.  
  95.  
  96.                     if (field[playerPosition[0]][playerPosition[1]] != 0) {
  97.  
  98.                         boolean escaped = tryToEscape(field, playerPosition, playerPosition[0], playerPosition[1]);
  99.  
  100.                         if (!escaped) {
  101.  
  102.                             if (field[playerPosition[0]][playerPosition[1]] != 0) {
  103.  
  104.                                 playerHealth -= ERUPTION_SPELL_DMG;
  105.                                 if (playerHealth <= 0) {
  106.                                     playerStatus.append("Killed by ").append(ERUPTION_SPELL);
  107.                                     finalPosition.append(playerPosition[0]).append(", ").append(playerPosition[1]);
  108.                                     heroIsAlive = false;
  109.                                 }
  110.                             }
  111.                         }
  112.                     }
  113.  
  114.                     clearField(field);
  115.                     break;
  116.             }
  117.         }
  118.  
  119.         if (bossHealth <= 0 && playerHealth <= 0) {
  120.             report = bossStatus.append(System.lineSeparator()).append(playerStatus).append(System.lineSeparator())
  121.                     .append(finalPosition);
  122.             System.out.println(report.toString());
  123.         } else if (bossHealth > 0) {
  124.             bossStatus.append(String.format("%.2f", bossHealth));
  125.             report = bossStatus.append(System.lineSeparator()).append(playerStatus).append(System.lineSeparator())
  126.                     .append(finalPosition);
  127.             System.out.println(report.toString());
  128.         } else {
  129.             playerStatus.append(playerHealth);
  130.             finalPosition.append(playerPosition[0]).append(", ")
  131.                     .append(playerPosition[1]);
  132.             report = bossStatus.append(System.lineSeparator()).append(playerStatus).append(System.lineSeparator())
  133.                     .append(finalPosition);
  134.             System.out.println(report.toString());
  135.         }
  136.     }
  137.  
  138.     private static boolean tryToEscape(int[][] field, int[] playerPosition, int playerRow, int playerCol) {
  139.  
  140.         if (isValidPosition(field, playerRow - 1, playerCol)) {
  141.             playerPosition[0] = playerRow - 1;
  142.             return true;
  143.         }
  144.  
  145.  
  146.         if (isValidPosition(field, playerRow, playerCol + 1)) {
  147.             playerPosition[1] = playerCol + 1;
  148.             return true;
  149.         }
  150.  
  151.  
  152.         if (isValidPosition(field, playerRow + 1, playerCol)) {
  153.             playerPosition[0] = playerRow + 1;
  154.             return true;
  155.         }
  156.  
  157.  
  158.         if (isValidPosition(field, playerRow, playerCol - 1)) {
  159.             playerPosition[1] = playerCol - 1;
  160.             return true;
  161.         }
  162.  
  163.         return false;
  164.     }
  165.  
  166.     private static void clearField(int[][] field) {
  167.         for (int i = 0; i < field.length; i++) {
  168.             for (int j = 0; j < field.length; j++) {
  169.                 field[i][j] = 0;
  170.             }
  171.         }
  172.     }
  173.  
  174.     private static boolean isValidPosition(int[][] field, int x, int y) {
  175.  
  176.         return x >= 0 && x < field.length && y >= 0 && y < field.length && field[x][y] == 0;
  177.     }
  178.  
  179.     private static void markAttackedZones(int fieldSize, int[][] field, int row, int col, int dmg) {
  180.         if (row == 0 && col == 0) {
  181.  
  182.             for (int i = 0; i < 2; i++) {
  183.                 for (int j = 0; j < 2; j++) {
  184.                     field[i][j] += dmg;
  185.                 }
  186.             }
  187.  
  188.         } else if (row == 0 && col == field[0].length - 1) {
  189.  
  190.             for (int i = 0; i < 2; i++) {
  191.                 for (int j = 0; j < 2; j++) {
  192.                     field[i][field[i].length - 1 - j] += dmg;
  193.                 }
  194.             }
  195.  
  196.         } else if (row == fieldSize - 1 && col == 0) {
  197.  
  198.             for (int i = 0; i < 2; i++) {
  199.                 for (int j = 0; j < 2; j++) {
  200.                     field[fieldSize - 1 - i][j] += dmg;
  201.                 }
  202.             }
  203.  
  204.         } else if (row == fieldSize - 1 && col == fieldSize - 1) {
  205.  
  206.             for (int i = 0; i < 2; i++) {
  207.                 for (int j = 0; j < 2; j++) {
  208.                     field[fieldSize - 1 - i][fieldSize - 1 - j] += dmg;
  209.                 }
  210.             }
  211.  
  212.         } else if (row == 0 && col > 0 && col < fieldSize - 1) {
  213.  
  214.             field[row][col] += dmg;
  215.             field[row][col + 1] += dmg;
  216.             field[row][col - 1] += dmg;
  217.             field[row + 1][col] += dmg;
  218.             field[row + 1][col + 1] += dmg;
  219.             field[row + 1][col - 1] += dmg;
  220.  
  221.         } else if (row == fieldSize - 1 && col > 0 && col < fieldSize - 1) {
  222.  
  223.             field[row][col - 1] += dmg;
  224.             field[row][col] += dmg;
  225.             field[row][col + 1] += dmg;
  226.             field[row - 1][col - 1] += dmg;
  227.             field[row - 1][col] += dmg;
  228.             field[row - 1][col + 1] += dmg;
  229.  
  230.         } else if (col == 0 && row > 0 && row < fieldSize - 1) {
  231.  
  232.             field[row][col] += dmg;
  233.             field[row - 1][col] += dmg;
  234.             field[row - 1][col + 1] += dmg;
  235.             field[row][col + 1] += dmg;
  236.             field[row + 1][col] += dmg;
  237.             field[row + 1][col + 1] += dmg;
  238.  
  239.         } else if (col == fieldSize - 1 && row > 0 && row < fieldSize - 1) {
  240.  
  241.             field[row][col] += dmg;
  242.             field[row - 1][col] += dmg;
  243.             field[row - 1][col - 1] += dmg;
  244.             field[row][col - 1] += dmg;
  245.             field[row + 1][col - 1] += dmg;
  246.             field[row + 1][col] += dmg;
  247.  
  248.         } else if (col == -1 && row == -1) {
  249.  
  250.             field[0][0] += dmg;
  251.  
  252.         } else if (col == -1 && row == fieldSize) {
  253.  
  254.             field[fieldSize - 1][0] += dmg;
  255.  
  256.         } else if (row == -1 && col == fieldSize) {
  257.  
  258.             field[0][fieldSize - 1] += dmg;
  259.  
  260.  
  261.         } else if (row == fieldSize && col == fieldSize) {
  262.  
  263.             field[fieldSize - 1][fieldSize - 1] += dmg;
  264.  
  265.         } else if (col == -1 && row > 0 && row < fieldSize - 1) {
  266.  
  267.             field[row - 1][col + 1] += dmg;
  268.             field[row][col + 1] += dmg;
  269.             field[row + 1][col + 1] += dmg;
  270.  
  271.  
  272.         } else if (row == -1 && col > 0 && col < fieldSize - 1) {
  273.  
  274.             field[row + 1][col - 1] += dmg;
  275.             field[row + 1][col] += dmg;
  276.             field[row + 1][col + 1] += dmg;
  277.  
  278.         } else if (col == fieldSize && row > 0 && row < fieldSize - 1) {
  279.  
  280.             field[row][col - 1] += dmg;
  281.             field[row - 1][col - 1] += dmg;
  282.             field[row + 1][col - 1] += dmg;
  283.  
  284.  
  285.         } else if (row == fieldSize && col > 0 && col < fieldSize - 1) {
  286.  
  287.             field[row - 1][col] += dmg;
  288.             field[row - 1][col - 1] += dmg;
  289.             field[row - 1][col + 1] += dmg;
  290.  
  291.  
  292.         } else if (row == 0 && col == -1) {
  293.  
  294.             field[row][col + 1] += dmg;
  295.             field[row + 1][col + 1] += dmg;
  296.  
  297.         } else if (row == -1 && col == 0) {
  298.  
  299.             field[row + 1][col] += dmg;
  300.             field[row + 1][col + 1] += dmg;
  301.  
  302.  
  303.         } else if (row == -1 && col == fieldSize - 1) {
  304.  
  305.             field[row + 1][col] += dmg;
  306.             field[row + 1][col - 1] += dmg;
  307.  
  308.  
  309.         } else if (row == 0 && col == fieldSize) {
  310.  
  311.             field[row][col - 1] += dmg;
  312.             field[row + 1][col - 1] += dmg;
  313.  
  314.         } else if (row == fieldSize - 1 && col == -1) {
  315.  
  316.             field[row][col + 1] += dmg;
  317.             field[row - 1][col + 1] += dmg;
  318.  
  319.         } else if (row == fieldSize && col == 0) {
  320.  
  321.             field[row - 1][col] += dmg;
  322.             field[row - 1][col + 1] += dmg;
  323.  
  324.         } else if (row == fieldSize && col == fieldSize - 1) {
  325.             field[row - 1][col] += dmg;
  326.             field[row - 1][col - 1] += dmg;
  327.  
  328.  
  329.         } else if (row == fieldSize - 1 && col == fieldSize) {
  330.             field[row][col - 1] += dmg;
  331.             field[row - 1][col - 1] += dmg;
  332.  
  333.         } else if (row > 0 && row < fieldSize - 1 && col > 0 && col < fieldSize - 1) {
  334.  
  335.             for (int i = 0; i < 3; i++) {
  336.                 for (int j = 0; j < 3; j++) {
  337.                     field[row - 1 + i][col - 1 + j] += dmg;
  338.                 }
  339.             }
  340.         }
  341.     }
  342. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top