Dicho de manera burda un juez en linea lo que hace es comparar 2 archivos y “dice” si son iguales
Juez en linea de programación
Es una herramienta web que pone a disposición de sus usuarios un conjunto de problemas de programación, generalmente de distintas temáticas y dificultades. Los interesados, pueden elegir uno de estos problemas, y tratar de resolverlo y una vez resuelto envian su código fuente al juez en linea.
Recibe un archivo por la red o una cadena que contiene el código fuente
Toma su código, lo compila, verifica si hay errores de compilación, ejecuta su código dando algunas entradas ocultas y recolectando la salida que produce su código, verifica los errores de tiempo de ejecución y finalmente compara la salida del programa recibido con sus salidas de prueba ocultas.
Ahora el procedimiento resumido general será así:
Su juez en linea tomará una cadena que contiene el código fuente y el lenguaje de programación (puede ser java) de un cliente como entrada. Este es el archivo que desea probar. Puede restringir al cliente solo para usar ciertos paquetes recorriendo linealmente la cadena y comprobando. Por ej. (como en Java) si está usando algún paquete que no sea lang y util. Cree un archivo como Main.java o Main.c, según el idioma que haya tomado como entrada y almacene la cadena en este archivo. Entonces, ahora tiene el archivo fuente de su cliente. Ahora viene la parte más importante. Tiene que compilar el archivo.
Lo que sigue es mas específico de Java
Cualquiera que sea el lenguaje que elija, debe tener la capacidad de ejecutar procesos del sistema operativo mediante programación.
Compilar el codigo fuente
Recuerde que cuando compila un código de Java escribe : "javac Main.java" en su terminal. Puede hacer lo mismo desde el código de su juez en linea si el lenguaje admite la capacidad mencionada anteriormente.
Para java, es facil con la clase ProcessBuilder.
Cada vez que ejecuta un proceso de sistema operativo, tiene derecho a obtener la salida en su código. Hay que tomar como entrada lo que el proceso de compilacion dio como salida. Una compilación exitosa no generará salida. De lo contrario, hay un "error de compilación".
Después de una compilación exitosa viene la ejecución.
Ejecutar el codigo compilado
la subrutina de ejecución también toma el límite de tiempo como entrada. Haga que el proceso espere el límite de tiempo dado. Si el proceso se completa dentro del límite de tiempo, waitfor () devuelve verdadero. Entonces, si se devuelve falso, sabrá que "excedio el límite de tiempo". Obtenga el código de salida del proceso. Si no es cero, hay un error de tiempo de ejecución y viceversa. Durante la ejecución lea la entrada para el proceso creado. El archivo de entrada contiene los casos de prueba ocultos que solo usted conoce. Envie la salida del código fuente del cliente a un archivo de salida.
Después de la ejecución, debe eliminar todos los archivos generados como .class o .exe programáticamente.
Ahora tiene la salida como output.txt. Ademas tiene sus salidas de prueba ocultas en alguna parte. Simplemente verifique si los dos archivos son iguales o no mediante el manejo de archivos. Si los dos son iguales, entonces es "respuesta correcta", de lo contrario no. Dicho de otro modo compare el archivo output.txt con algún archivo solution.txt carácter por carácter e informe los resultados.
Para la parte "en línea".
Necesita saber cómo crear una aplicación web. En Java puede usar servlets
Debe haber una base de datos como MySQL que almacene todos los detalles de la cuenta del usuario,
detalles del problema: (nombre del problema, declaración, restricciones, entrada de muestra, salida de muestra, límite de tiempo, carpeta del problema, etc.).
Aquí la carpeta de problemas de un problema es la ruta de la carpeta donde se almacenaron las entradas y salidas ocultas y se realizó todo el manejo de archivos correspondiente a ese problema. Cada problema tiene su propia carpeta.
Otra cosa que hace un juez en linea es:
Sandboxing
Es un mecanismo para ejecutar programas con seguridad y de manera separada
Nota
Las entradas y salidas ocultas son entradas y salidas que usa el juez en linea pero que quien envia su código al juez en linea desconoce.
Hacer un demo
Tener un conjunto de problemas para los usuarios
Tener un conjunto de programas que un usuario podria usar
Entregar
Código fuente y ejecutable con los siguientes datos
Nombre completo
Grupo
Proyecto final de Programación Orientada a Objetos
Incluir dichos datos y en cada archivo del código fuente como un comentario usando /* */.
Documentación
Diagrama de clases
Imprimir pantallas que muestren ejemplos de ejecuciones del programa además incluir portada