MOJ MOJ Melhor Online Judge BETA

moj-comp — a CLI do competidor (envie do terminal, sobreviva à queda de Internet)

Tudo que a página do contest faz — enviar, veredictos, placar, clarifications — no seu terminal. E uma coisa que o navegador não faz: se a Internet CAIR, sua submissão fica guardada com o horário correto e conta NAQUELE horário quando a rede voltar.

1. Preparar (faça ANTES da prova)

curl -fsSL https://moj.naquadah.com.br/moj-comp -o ~/.local/bin/moj-comp && chmod +x ~/.local/bin/moj-comp
moj-comp login prova1apc        # o login/senha que a organização te entregou
moj-comp fetch                  # baixa TODOS os enunciados p/ ./prova1apc-prova/

Requisitos: bash, curl, jq, openssl — qualquer máquina de laboratório Linux/macOS tem; sem root, sem instalação, um arquivo só. O login também aceita a URL da prova (moj-comp login https://prova1apc.moj.naquadah.com.br).

O fetch é o seu seguro: enunciados salvos localmente (HTML/PDF) significam que você continua TRABALHANDO mesmo com rede zero. Rode logo depois do login.

No login a CLI também recebe a chave pública do contest e mede o seu relógio contra o do servidor — é isso que arma o modo offline (seção 4). moj-comp doctor confere tudo.

2. Enviar e acompanhar

moj-comp problems               # letras, nomes e time-limits
moj-comp submit A sol.c         # envia e ESPERA o veredicto ali mesmo
moj-comp subs                   # todas as suas submissões e veredictos

A linguagem vem da extensão do arquivo (sol.c, sol.cpp, sol.py, Main.java…). O submit espera o veredicto (poucos segundos) e imprime — sem trocar de aba, sem refresh.

3. Placar, dúvidas, avisos

moj-comp score                  # o placar, no terminal
moj-comp clar ask B "A entrada termina com EOF ou com 0?"
moj-comp clar ls                # suas perguntas e as respostas
moj-comp news                   # avisos da organização

4. ☠ Caiu a Internet? Respira. Conta no horário certo.

Em prova, o HORÁRIO da submissão define a penalidade — perder a rede não pode te custar minutos. Quando o submit não alcança o servidor, a CLI entra no modo emergencial sozinha:

$ moj-comp submit C sol.cpp
⚠ SEM REDE — ativando o modo emergencial.
submissão EMPACOTADA offline: C, sol.cpp, carimbo UTC 14:32:07.
ela vale NO HORÁRIO DO CARIMBO quando a rede voltar. Deixe rodando: moj-comp monitor

Aí deixe ISTO rodando num terminal — mostra a fila, tenta reenviar sozinho a cada 15s e acompanha os veredictos quando a rede voltar:

$ moj-comp monitor
[14:33:02] rede: OFFLINE · fila: 1 pacote(s)
  1784561527-000.pkt  carimbo 14:32:07 (há 1min)
[14:41:17] rede: ONLINE · fila: 1 pacote(s)
✓ 1784561527-000.pkt ACEITA — contabilizada às 14:32:07 UTC (id 3f9a…)
veredicto: Accepted
  • Por que o horário é confiável? O pacote é cifrado com a chave do contest e carrega uma âncora de tempo ASSINADA recebida do servidor — a organização consegue verificar que a submissão nasceu quando diz. Seu relógio pode até estar errado: a CLI mede o desvio contra o servidor e carimba o UTC corrigido.
  • Seu código também fica protegido: em disco de laboratório, o pacote na fila é ilegível p/ os outros (só o servidor abre).
  • Quando aceita, entra no placar NO HORÁRIO DO CARIMBO — penalidade calculada como se a rede nunca tivesse caído.
O carimbo precisa estar dentro da sua janela de prova e depois do seu último contato com o servidor — pacote que falha na validação fica guardado em rejeitados/ com o motivo: mostre à organização.

5. ⚡ Comandos rápidos

ComandoO que faz
moj-comp login <id|url>entra no contest (credenciais da organização)
moj-comp fetchbaixa TODOS os enunciados (seu seguro anti-queda)
moj-comp statement <letra>baixa SÓ um enunciado (HTML e PDF, se houver)
moj-comp problems · score · newsproblemas/TLs · placar · avisos
moj-comp submit <letra> <arquivo>envia + espera o veredicto (modo offline entra sozinho)
moj-comp subssuas submissões e veredictos
moj-comp clar ls | ask <letra|geral> <texto>dúvidas p/ a organização
moj-comp outbox · sync · monitorfila offline · reenviar já · VIGIA durante a queda
moj-comp time · doctor · updaterelógio · diagnóstico · auto-atualização

6. 💡 Dicas

  • Rode fetch LOGO após o login — enunciado em disco vence qualquer queda.
  • Durante a queda, continue codando e enviando: cada submit empilha um pacote carimbado; o monitor entrega tudo em ordem quando a rede volta.
  • O moj-comp time diz se seu relógio está torto (sem precisar de root — a CLI corrige os carimbos sozinha).
  • Prova com gate de navegador por sede? Rode a CLI NA MÁQUINA DE PROVA: ela lê o User-Agent da imagem da sede em /etc/moj/user-agent e o manda junto da própria marca (moj-comp/build), então passa no gate e divide a chave de máquina com o navegador. De outra máquina o login dá 403 ua_gate, de propósito. O moj-comp doctor mostra o User-Agent em uso.
  • A página web e a CLI são a mesma conta: use as duas ao mesmo tempo se quiser (navegador p/ ler, terminal p/ enviar).

Manual do competidor (o lado da página web) · Documentação completa