Praticar
Fazenda de execução de jobsDifícil · versão 1
Carregando…
Nível 1 de 4150 pontos2s · 256 MiB

Fazenda de execução de jobs

@silogium

Implemente um serviço em memória que distribui jobs de compilação entre workers.

Use BuildFarmService. Os timestamps chegam em ordem estritamente crescente e não precisam ser validados.

Operações

addWorker(workerId, capacity) / add_worker

  • Cria um worker com ID não vazio e capacidade inteira positiva.
  • IDs de workers ativos não podem se repetir.
  • Retorna true no sucesso e false no erro.

submitJob(timestamp, jobId, workerId, cost) / submit_job

  • Cria um job ativo no worker indicado.
  • jobId é não vazio e nunca pode ser reutilizado, mesmo após conclusão.
  • cost é inteiro positivo e consome capacidade enquanto o job estiver ativo.
  • Falha quando o worker não existe ou sua capacidade livre é menor que o custo.

completeJob(timestamp, jobId) / complete_job

  • Conclui um job ativo e libera sua capacidade.
  • Job inexistente ou já concluído retorna false.

getWorkerLoad(timestamp, workerId) / get_worker_load

  • Retorna a soma dos custos dos jobs ativos no worker.
  • Worker inexistente retorna null/None.
addWorker("w1", 10)               -> true
submitJob(1, "build-a", "w1", 6) -> true
submitJob(2, "build-b", "w1", 5) -> false
getWorkerLoad(3, "w1")            -> 6
completeJob(4, "build-a")         -> true
getWorkerLoad(5, "w1")            -> 0

Quando terminar:

npm run assessment -- test q3 ts 1
# ou
npm run assessment -- test q3 py 1
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.

grafosdependênciasestadoescalonamento
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 fazenda-de-builds --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.