Juez Miau

Cada envío en su caja.

Juez Miau es un juez automático para concursos de programación. Califica rápido y parejo: cada solución corre sola, sin red, con su propio núcleo y los mismos límites para todos. Tú organizas el concurso; el gatito revisa las cajas.

C · C++ · Java · Python · JavaScript · C#

Juez Miau · envío#1042

Ajolote Recursivo

Problema
C · Rutas en la sierra
Lenguaje
C++17
Límites
1 s · 256 MB por caso
Máximos
42 ms · 2048 KB
12/12 casos
Aceptado
Envío de ejemplo. Juzgado: el equipo ya recibió el aviso.

Del archivo al veredicto, sin que nadie se levante.

El equipo programa en su IDE y envía desde la app de escritorio. El juez compila una vez, corre todos los casos y le avisa al equipo con una notificación de Windows. El marcador se recalcula al instante en el panel, en la app y en el proyector.

Rastreo del envío#1042 · ejemplo
  1. RecibidoLlega desde la app de escritorio del equipo.
  2. En colaEspera su turno en la cola del juez.
  3. CompiladoUna sola vez · 1.8 s.
  4. Juzgado12 casos, cada uno con su núcleo · máx. 42 ms.
  5. EntregadoAviso al equipo y marcador actualizado.

La app es un solo .exe que vive en la bandeja, detrás del IDE: ahí están los problemas, las plantillas, los envíos y sus veredictos.

Veredictos que reconoce:

  • ACAceptado
  • Respuesta incorrecta
  • TLETiempo excedido
  • MLEMemoria excedida
  • REError en ejecución
  • CEError de compilación

Las mismas reglas para todas las cajas.

Cada envío corre dentro de un contenedor Docker aislado. Nada que haga un equipo le quita tiempo, memoria o ventaja a otro.

  • Sin red
  • 1 núcleo por caso
  • Límite de tiempo
  • Límite de memoria

El contenedor no tiene salida a internet ni a la red del laboratorio. Cada caso de prueba tiene un núcleo de CPU reservado, así que ninguna corrida le roba tiempo a otra. Los límites de tiempo y de memoria son los mismos para todos los envíos del problema; si un envío se pasa, el veredicto es TLE o MLE.

Marcador · avanzadomin 107 · ejemplo
#EquipoResueltosPen.
1Quetzal GreedyABCD297
2Ajolote RecursivoABCD298
3Ornitorrinco BinarioABCD312
4Bit a BitABCD164

00:48:00 Marcador congelado

Cómo se ordena el marcador

Gana quien resuelve más problemas. El empate se rompe con la penalización: el minuto de cada aceptado más 20 por cada rechazo previo. Un error de compilación no cuenta.

Un reloj para todo el concurso

El mismo tiempo en el panel, en la app y en el proyector. El staff lo inicia, lo pausa y lo termina.

El final se sella

En la última parte el marcador público se congela. Los envíos se siguen juzgando y el resultado se revela en la premiación.

El gatito detective de Juez Miau con su lupa

El gatito revisa cada computadora.

La app de escritorio le manda al juez un latido periódico con los procesos abiertos, los monitores conectados y las memorias USB de cada equipo. Cada edición define qué está prohibido.

Si algo rompe una regla, el staff ve la alerta y puede suspender al equipo. El equipo nunca ve la alerta.

Reporte de inspección · LAB-2solo staff
  • AlertaQuetzal Greedy · 2 monitores (máx. 1)
  • AlertaQuetzal Greedy · memoria USB conectada
  • AvisoBit a Bit · sin latido hace 2 min

Ejemplo

¿Qué trae la caja?

Todo lo que usa el staff, los equipos y el auditorio el día del concurso.

Lista de empaqueJuez Miau v1.0
Cant.ArtículoPara
1Panel webEdiciones, categorías, salones, equipos y problemas con sus casos de prueba.Staff
4Roles por ediciónSuperadmin, administrador, juez y observador, cada uno con sus permisos.Staff
1App de escritorioUn solo .exe para Windows: problemas, envíos y avisos.Equipos
1AclaracionesEl equipo pregunta desde la app; el juez responde a ese equipo o a todos.Jueces y equipos
1Vista de proyectorMarcador por categoría y reloj, en vivo.Auditorio
1Credenciales en PDFUsuario y contraseña de cada equipo, listas para imprimir.Equipos
1Bitácora de auditoríaLas acciones importantes del staff quedan registradas.Staff

Instrucciones de armado.

Todo corre en un solo servidor del laboratorio con Docker Compose. Se monta unos días antes del concurso y se desmonta después.

  1. Consigue una máquina

    Palomea lo que ya tienes:

  2. Clona y configura

    $ git clone https://github.com/LaBoa99/juez-miau
    $ cd mi-concurso-monorepo/deploy
    $ cp .env.example .env

    En .env pon la dirección pública, las contraseñas y los secretos.

  3. Levántalo

    $ docker compose up -d --build
    web      Up   api    Up
    worker   Up   redis  Up
    postgres Up
  4. Entra al panel

    Abre la dirección pública con el usuario administrador del .env y crea tu primera edición. Reparte la app de escritorio en las máquinas de los equipos.

¿Tu laboratorio no tiene internet? Prepara las imágenes en otra máquina y cópialas; la guía explica cómo.

Lo que viene en el compose.

Un solo archivo, deploy/docker-compose.yml, levanta todo el concurso. Es el mismo para el día del concurso y para desarrollo.

  • webCaddy

    Sirve el panel de staff y pasa /api y /socket.io a la API.

    :80 · :443
  • apiNestJS

    La API del panel y de la app de escritorio. Al arrancar carga los datos iniciales.

    interno
  • workerEl juez

    Mismo código que la API. Toma los envíos de la cola y los corre en contenedores.

    sin puertos
  • postgresPostgreSQL 14

    Ediciones, equipos, problemas, envíos y bitácora.

    solo 127.0.0.1
  • redisRedis 7

    La cola de envíos que reparte el trabajo al juez.

    solo 127.0.0.1
  • judge-*Lenguajes

    Imágenes de gcc, Java, .NET, Node y Python. Solo se descargan; terminan en Exited (0).

    sin puertos
Documentación incluidaen el repo
RemitenteCUValles · UdeG

Hecho en el CUValles.

Juez Miau nació en la Maestría en Ingeniería de Software del Centro Universitario de los Valles, para que la universidad tuviera un juez propio, a la medida de sus laboratorios. Ahora la caja está abierta para que otras escuelas lo usen en sus concursos.

  • Claudio Gael Rodriguez VegaIng. · Maestría en Ingeniería de Software
  • Maribel Navarro JaquizIng. · Maestría en Ingeniería de Software