Advertisement
Daniel_007

03. Parking

Oct 24th, 2020 (edited)
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //JUDGE - 88/100
  2. class Parking {
  3.   constructor(capacity) {
  4.     this.capacity = capacity;
  5.     this.vehicles = [];
  6.   }
  7.   addCar(carModel, carNumber) {
  8.     if (this.vehicles.length >= this.capacity) {
  9.       throw new Error("Not enough parking space.");
  10.     }
  11.  
  12.     let newCar = { carModel, carNumber, payed: false };
  13.     this.vehicles.push(newCar);
  14.     return `The ${carModel}, with a registration number ${carNumber}, parked.`;
  15.   }
  16.   removeCar(carNumber) {
  17.     let foundCar = this.vehicles.find((i) => i.carNumber == carNumber);
  18.  
  19.     if (foundCar) {
  20.       if (foundCar.payed) {
  21.         let foundCarIndex = this.vehicles.findIndex(
  22.           (i) => i.carNumber == carNumber
  23.         );
  24.         this.vehicles.splice(foundCarIndex, 1);
  25.         return `${carNumber} left the parking lot.`;
  26.       } else {
  27.         return `${carNumber} needs to pay before leaving the parking lot.`;
  28.       }
  29.     } else {
  30.       throw new Error("The car, you're looking for, is not found.");
  31.     }
  32.   }
  33.   pay(carNumber) {
  34.     let foundCar = this.vehicles.find((i) => i.carNumber == carNumber);
  35.  
  36.     if (foundCar) {
  37.       if (foundCar.payed) {
  38.         throw new Error(`${carNumber}\'s driver has already payed his ticket.`);
  39.      } else {
  40.        foundCar.payed = true;
  41.        return `${carNumber}\'s driver successfully payed for his stay.`;
  42.      }
  43.    } else {
  44.      throw new Error(`${carNumber} is not in the parking lot.`);
  45.    }
  46.  }
  47.  getStatistics(carNumber) {
  48.    if (carNumber) {
  49.      let foundCar = this.vehicles.find((i) => i.carNumber == carNumber);
  50.      if (foundCar.payed) {
  51.        return `${foundCar.carModel} == ${foundCar.carNumber} - Has payed`;
  52.      } else {
  53.        return `${foundCar.carModel} == ${foundCar.carNumber} - Not payed`;
  54.      }
  55.    } else {
  56.      let sorted = this.vehicles.sort((a, b) =>
  57.        a.carModel.localeCompare(b.carModel)
  58.      );
  59.      let emptySlots = this.capacity - this.vehicles.length;
  60.      let message = `The Parking Lot has ${emptySlots} empty spots left.`;
  61.      sorted.forEach((car) => {
  62.        if (car.payed) {
  63.          message += "\n" + `${car.carModel} == ${car.carNumber} - Has payed`;
  64.        } else {
  65.          message += "\n" + `${car.carModel} == ${car.carNumber} - Not payed`;
  66.        }
  67.      });
  68.      return message;
  69.    }
  70.  }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement