kstoyanov

04. Rest House js exam

Aug 4th, 2020
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve(allRooms, guests) {
  2.   const rooms = new Map();
  3.   let guestsWithoutRooms = 0;
  4.   allRooms.forEach((currentRoom) => {
  5.     const { type } = currentRoom;
  6.  
  7.     const roomSpace = type === 'double-bedded' ? 2 : 3;
  8.     rooms.set(currentRoom.number, { type, emptyBeds: roomSpace });
  9.   });
  10.  
  11.   guests.forEach((currentPair) => {
  12.     let roomFound = false;
  13.     if (currentPair.first.gender !== currentPair.second.gender) {
  14.       for (const [, value] of rooms) {
  15.         if (value.type === 'double-bedded' && value.emptyBeds === 2) {
  16.           value.guests = [];
  17.           value.guests = [currentPair.first, currentPair.second];
  18.           value.emptyBeds = 0;
  19.           roomFound = true;
  20.           break;
  21.         }
  22.       }
  23.     } else {
  24.       for (const [, value] of rooms) {
  25.         if (value.type === 'triple' && value.emptyBeds > 1) {
  26.           if (value.guests === undefined) {
  27.             value.guests = [];
  28.           } else if (value.guests[0].gender !== currentPair.second.gender) {
  29.             continue;
  30.           }
  31.           if (currentPair.first) {
  32.             value.guests.push(currentPair.first);
  33.             value.emptyBeds -= 1;
  34.           }
  35.           value.guests.push(currentPair.second);
  36.           value.emptyBeds -= 1;
  37.           roomFound = true;
  38.           break;
  39.         } else if (value.type === 'triple' && value.emptyBeds === 1) {
  40.           if (value.guests[0].gender === currentPair.second.gender) {
  41.             value.guests.push(currentPair.first === undefined ? currentPair.second : currentPair.first);
  42.             value.emptyBeds -= 1;
  43.             currentPair.first = undefined;
  44.           }
  45.         }
  46.       }
  47.     }
  48.     if (!roomFound) {
  49.       guestsWithoutRooms += currentPair.first === undefined ? 1 : 2;
  50.     }
  51.   });
  52.  
  53.   [...rooms].sort().forEach((el) => {
  54.     const [room, value] = el;
  55.     console.log(`Room number: ${room}`);
  56.     if (value.guests) {
  57.       for (const guest of value.guests.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase()))) {
  58.         console.log(`--Guest Name: ${guest.name}`);
  59.         console.log(`--Guest Age: ${guest.age}`);
  60.       }
  61.     }
  62.     console.log(`Empty beds in the room: ${value.emptyBeds}`);
  63.   });
  64.   console.log(`Guests moved to the tea house: ${guestsWithoutRooms}`);
  65. }
Advertisement
Add Comment
Please, Sign In to add comment