-
Notifications
You must be signed in to change notification settings - Fork 5
Casos
Freddy Román edited this page Jul 4, 2022
·
4 revisions
- Escribe casos ya sea manualmente o autogenerados, siguiendo la especificación de la entrada. No olvides agruparlos de ser necesario, y si hay subtareas, de incluir en su nombre el identificador de la subtarea.
-
No borres los casos de ejemplo que ya se encuentran en
cases
. Si no quieres que esos casos den puntos, puedes asignarles 0 puntos en eltestplan
.- Esto es necesario para que los casos de ejemplo sigan siendo validados;
los tests solamente consideran los casos en
cases
para validación.
- Esto es necesario para que los casos de ejemplo sigan siendo validados;
los tests solamente consideran los casos en
- En caso de que los
.in
de tus casos sean autogenerados, incluye el código que los generó en la raíz del problema, con el nombrecase-generator.[lang]
. - Antes de planear y generar los casos, considera las siguientes limitaciones:
- Los problemas en su totalidad deben pesar menos de 100 MiB (incluyendo entradas, redacciones, imágenes, etc.)
- Cada archivo del caso (
.in
,.out
) no puede pesar más de 2 MiB. Este es un límite estricto: si no lo respetas, las pruebas fallarán.- Intenta dejar un poco de holgura para que otras soluciones válidas no reciban OLE, en especial cuando haya múltiples salidas posibles.
- El tiempo de ejecución máximo para todo el problema es 1 minuto.
- Si la solución oficial no se puede utilizar para auto-generar los archivos
.out
, hay que generarlos manualmente y agregarlos:- Los problemas que tienen un validador personalizado pueden tener
.out
vacíos si el validador no necesita información más allá del.in
original y la salida del concursante para generar el veredicto. También se puede poner información en el.out
que le puede ayudar al validador. Por ejemplo, la cota superior / inferior conocida de lo que se desea optimizar. - Para los problemas interactivos, como el
Main.[lang]
típicamente hace las veces del validador, la misma información aplica. - Si generar los archivos
.out
toma mucho tiempo o es necesario generarlos a mano por cualquier razón, hay que agregar el código que los generó en la raíz del problema, con el nombreoutput-generator.[lang]
.
- Los problemas que tienen un validador personalizado pueden tener
- Haz un
testplan
para tus casos.- La convención en la OFMI es que el valor de los casos no puede tener puntos decimales, y el problema necesariamente debe sumar 100 puntos.
- Cuando hay casos agrupados, la convención es que el primer caso en el
testplan
debe tener el valor entero del grupo, y todos los demás casos 0. Por ejemplo:group.1 40 group.2 0 group.3 0
- Si es un problema con más de una salida válida, agrega en la raiz el
validator.[lang]
y cambia ensettings.json
la sección devalidator
:"validator": { "name": "custom", "limits": { "TimeLimit": 1000 } }
- Si es un problema interactivo, puedes consultar la documentación de
libinteractive y usar el
problema
OMI-2019-Mobius
como plantilla para empezar. Lo importante es tener la carpetainteractive/
con un archivo[ModuleName].idl
, un archivoMain.cpp
con el programa juez oficial y un archivoMain.distrib.cpp
que es el programa juez que se va a compartir con los concursantes (por si el juez oficial tiene secretos, o pistas de cómo se resuelve el problema). También hay que agregar asettings.json
la sección deinteractive
:"interactive": { "ModuleName": "[ModuleName]" }