Implemente um sistema de reservas de salas em memória usando a classe RoomReservationService.
Os timestamps das operações são inteiros estritamente crescentes. Horários das reservas também são inteiros, mas são independentes do timestamp da chamada.
Intervalos usam a convenção semiaberta [start, end): uma reserva que termina em 20 não conflita com outra que começa em 20.
Operações
addRoom(roomId, capacity) / add_room
- Cria uma sala com identificador não vazio e capacidade inteira positiva.
- Não permite identificadores duplicados.
book(timestamp, bookingId, roomId, userId, start, end, attendees)
- Cria uma reserva quando
start < end,attendees > 0eattendees <= capacidade. bookingId,roomIdeuserIddevem ser não vazios.- O ID de uma reserva bem-sucedida nunca pode ser reutilizado, mesmo após cancelamento.
- A reserva falha quando seu intervalo conflita com uma reserva ativa da mesma sala.
- Retorna
trueoufalse.
cancel(timestamp, bookingId)
- Cancela uma reserva ativa e retorna
true. - IDs inexistentes ou já cancelados retornam
false.
roomSchedule(timestamp, roomId) / room_schedule
- Retorna somente reservas ativas, ordenadas por
starte depois porbookingId. - Formato:
bookingId:start-end, por exemplob1:10-20. - Sala inexistente retorna lista vazia.
Exemplo
addRoom("R1", 4) -> true
book(1, "b1", "R1", "u1", 10, 20, 3) -> true
book(2, "b2", "R1", "u2", 15, 25, 2) -> false
book(3, "b3", "R1", "u2", 20, 25, 2) -> true
roomSchedule(4, "R1") -> ["b1:10-20", "b3:20-25"]