Advertisement
Guest User

Parking system

a guest
Feb 16th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.73 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.*;
  5.  
  6. public class newClass {
  7.     public static void main(String[] args) throws IOException {
  8.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  9.  
  10.         int[] dimensions = Arrays.stream(reader.readLine().split("\\s+"))
  11.                 .mapToInt(Integer::parseInt)
  12.                 .toArray();
  13.  
  14.         int rows = dimensions[0];
  15.         int cols = dimensions[1];
  16.  
  17.         boolean[][] parking = new boolean[rows][cols];
  18.  
  19.         for (int i = 0; i < rows; i++) {
  20.             parking[i][0] = true;
  21.         }
  22.  
  23.         String line;
  24.         while (!"stop".equals(line = reader.readLine())) {
  25.             int[] data = Arrays.stream(line.split("\\s+"))
  26.                     .mapToInt(Integer::parseInt)
  27.                     .toArray();
  28.  
  29.             int entryRow = data[0];
  30.             int desiredRow = data[1];
  31.             int desiredCol = data[2];
  32.  
  33.             int countSteps = Math.abs(desiredRow - entryRow) + 1;
  34.  
  35.             if (!parking[desiredRow][desiredCol]) {
  36.                 countSteps += desiredCol;
  37.                 parking[desiredRow][desiredCol] = true;
  38.                 System.out.println(countSteps);
  39.             } else {
  40.                 if (thereIsAParkingSlotAvailable(desiredRow, cols, parking)) {
  41.                     int leftClosestIndex = -1;
  42.                     int rightClosestIndex = -1;
  43.                     int closestIndex = -1;
  44.                     if (desiredCol != 1 && desiredCol != cols - 1) {
  45.                         leftClosestIndex = getLeftClosestIndex(parking[desiredRow], desiredCol, leftClosestIndex);
  46.                         rightClosestIndex = getRightClosestIndex(cols, parking[desiredRow], desiredCol, rightClosestIndex);
  47.  
  48.                         if (rightClosestIndex - desiredCol < desiredCol - leftClosestIndex && rightClosestIndex != -1) {
  49.                             closestIndex = rightClosestIndex;
  50.                         } else {
  51.                             closestIndex = leftClosestIndex;
  52.                         }
  53.                     } else if (desiredCol == 1) {
  54.                         closestIndex = getRightClosestIndex(cols, parking[desiredRow], desiredCol, rightClosestIndex);
  55.                     } else if (desiredCol == cols - 1) {
  56.                         closestIndex = getLeftClosestIndex(parking[desiredRow], desiredCol, leftClosestIndex);
  57.                     }
  58.                     parking[desiredRow][closestIndex] = true;
  59.                     countSteps += closestIndex;
  60.                     System.out.println(countSteps);
  61.                 } else {
  62.                     System.out.printf("Row %d full%n", desiredRow);
  63.                 }
  64.             }
  65.         }
  66.  
  67.     }
  68.  
  69.     private static int getRightClosestIndex(int cols, boolean[] row, int desiredCol, int rightClosestIndex) {
  70.         for (int i = desiredCol + 1; i < cols; i++) {
  71.             if (!row[i]) {
  72.                 rightClosestIndex = i;
  73.                 break;
  74.             }
  75.         }
  76.         return rightClosestIndex;
  77.     }
  78.  
  79.     private static int getLeftClosestIndex(boolean[] row, int desiredCol, int leftClosestIndex) {
  80.         for (int i = desiredCol - 1; i > 0; i--) {
  81.             if (!row[i]) {
  82.                 leftClosestIndex = i;
  83.                 break;
  84.             }
  85.         }
  86.         return leftClosestIndex;
  87.     }
  88.  
  89.     private static boolean thereIsAParkingSlotAvailable(int desiredRow, int cols, boolean[][] parking) {
  90.         boolean available = false;
  91.  
  92.         for (int i = 0; i < cols; i++) {
  93.             if (!parking[desiredRow][i]) {
  94.                 available = true;
  95.                 break;
  96.             }
  97.         }
  98.  
  99.         return available;
  100.     }
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement