Praticar
Reservas de coworkingDifícil · versão 1
Carregando…
Nível 1 de 4150 pontos2s · 256 MiB

Reservas de coworking

@silogium

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 > 0 e attendees <= capacidade.
  • bookingId, roomId e userId devem 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 true ou false.

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 start e depois por bookingId.
  • Formato: bookingId:start-end, por exemplo b1: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"]
Sincronizar rascunho entre dispositivos

O salvamento local continua automático. A sincronização é explícita e inclui código, testes próprios e preferências desta versão e linguagem.

intervalosordenaçãoestadoatomicidade
solucao.ts
Restaurando rascunho…
Execute os testes visíveis ou crie seus próprios casos.

Resolver pelo terminal

Baixe a questão e seus testes visíveis. Use o editor de sua preferência.

silogium pull reservas-de-coworking --runtime ts

  1. Execute silogium auth <token> usando um token do seu perfil.
  2. Execute o comando acima e abra o diretório baixado.
  3. Rode silogium test e, quando terminar, silogium submit.