Build a simple Parcel Locker Service that manages lockers of fixed sizes: S, M, L, XL, XXL. Each package must go into a locker of the same size, and one locker can hold at most one package at any time. The system must support adding lockers on the fly, finding a free locker of a requested size, marking a locker as occupied, and freeing it later.
Provide the following operations:
addSlot(size: String): void
Add a new empty locker of the given size, if size is invalid then do nothing. findSlot(size: String): Locker | ""
Return an available locker of that size, or empty string "" if none exist. occupySlot(lockerId: String): boolean
Mark the locker as in use; returns true if successful.freeSlot(lockerId: String): boolean
Mark the locker as empty again; returns true if successful.Expected behavior:
// Example 1 LockerManager sys = new LockerManager(); sys.addSlot("M"); // creates "M1" sys.addSlot("L"); // creates "L1" Locker m1 = sys.findSlot("M"); // returns a free medium locker ( id "M1") sys.occupySlot(m1.getId()); // true sys.freeSlot(m1.getId()); // true
// Example 2 LockerManager sys = new LockerManager(); sys.addSlot("S"); // S1 sys.addSlot("S"); // S2 Locker sA = sys.findSlot("S"); // get one small locker S1 sys.occupySlot(sA.getId()); // true sys.occupySlot(sA.getId()); // false (already taken) Locker sB = sys.findSlot("S"); // returns a different free small locker, S2