Skip to content

Instantly share code, notes, and snippets.

@abdulmuneer22
Created June 11, 2020 12:58
Show Gist options
  • Save abdulmuneer22/b65a7461d62ef1c00d56890c250ba054 to your computer and use it in GitHub Desktop.
Save abdulmuneer22/b65a7461d62ef1c00d56890c250ba054 to your computer and use it in GitHub Desktop.

Revisions

  1. abdulmuneer22 created this gist Jun 11, 2020.
    131 changes: 131 additions & 0 deletions Parking Lot
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,131 @@
    import { chain } from "icepick";

    const slotsStub = [
    {
    slot: 0,
    vehicleNumber: "",
    color: ""
    },
    {
    slot: 1,
    vehicleNumber: "",
    color: ""
    },
    {
    slot: 2,
    vehicleNumber: "",
    color: ""
    },
    {
    slot: 3,
    vehicleNumber: "",
    color: ""
    },
    {
    slot: 4,
    vehicleNumber: "",
    color: ""
    },
    {
    slot: 5,
    vehicleNumber: "",
    color: ""
    }
    ];

    class ParkingLot {
    constructor() {
    this.parkingCapacity = 5;
    this.slots = slotsStub;
    }

    getCurrentParkingCapacity = () => {
    return this.parkingCapacity;
    };

    enterVehicle = (vehicleNumber, color) => {
    if (!vehicleNumber) {
    console.error("Please provide a valid vehicle number");
    return;
    }
    let nextSlot = this.slots.findIndex(obj => obj.vehicleNumber === "");
    console.log("next slot", nextSlot);
    if (nextSlot === -1) {
    console.error("No Slots are available");
    return;
    }
    let updatedSlots = chain(this.slots)
    .setIn([nextSlot, "vehicleNumber"], vehicleNumber)
    .setIn([nextSlot, "color"], color)
    .value();
    this.slots = updatedSlots;
    };

    exitVehicle = vehicleNumber => {
    if (!vehicleNumber) {
    console.error("Please provide a valid vehicle number");
    return;
    }

    let slot = this.slots.findIndex(obj => obj.vehicleNumber === vehicleNumber);
    if (slot === -1) {
    console.error("No vehicle with this number found");
    return;
    }

    let updatedSlots = chain(this.slots)
    .setIn([slot, "vehicleNumber"], "")
    .setIn([slot, "color"], "")
    .value();
    this.slots = updatedSlots;
    };

    getSlotByColor = color => {
    let vehicles = this.slots.filter(obj => obj.color === color);
    if (vehicles && vehicles.length > 0) {
    return vehicles;
    }
    console.error("No Vehicles found with given color");
    };

    getEmptySlots = () => {
    let slots = this.slots.filter(obj => obj.vehicleNumber === "");
    return slots;
    };

    findVehicleSlot = vehicleNumber => {
    let slot = this.slots.filter(obj => obj.vehicleNumber === vehicleNumber);
    if (!slot.length > 0) {
    console.error("No Vehicles found with given number");
    return;
    }
    return slot;
    };
    }

    const parkingLot = new ParkingLot({ parkingCapacity: 100 });

    console.log(parkingLot.getCurrentParkingCapacity());

    parkingLot.enterVehicle("KA-1020", "red");
    console.log(parkingLot.slots);
    parkingLot.enterVehicle("KA-1020", "red");
    console.log(parkingLot.slots);
    parkingLot.enterVehicle("KA-1020", "red");
    console.log(parkingLot.slots);
    parkingLot.enterVehicle("KA-1020", "red");
    console.log(parkingLot.slots);
    parkingLot.enterVehicle("KA-1020", "red");
    console.log(parkingLot.slots);
    parkingLot.enterVehicle("KA-1020", "red");
    console.log(parkingLot.slots);
    parkingLot.enterVehicle("KA-1020", "red");
    console.log(parkingLot.slots);
    parkingLot.exitVehicle("KA-1020", "red");
    console.log(parkingLot.slots);

    console.log(parkingLot.vehicles);
    console.log(parkingLot.getSlotByColor("yellow"));

    console.log(parkingLot.getEmptySlots());
    console.log(parkingLot.findVehicleSlot("KA-1020"));