libinteractive

Un pequeño traductor de IDL que crea adaptadores que hacen llamadas entre procesos para crear problemas interactivos fácilmente.

Para evitar tener que escribir un programa en cada uno de los lenguajes soportados y asegurarse que no tengan bugs y no tengan comportamiento indefinido que pueda hacer que se emita un veredicto incorrecto, libinteractive te permite tener ambas implementaciones en procesos (y lenguajes) separados.

Ejemplo

Digamos que tienes un problema llamado sumas. Tú como juez implementas un validador en un archivo Main.cpp y el competidor codifica la solución en sumas.py, puedes hacer:

$ ls
Main.cpp sumas.py sumas.idl input

$ cat Main.cpp
#include <stdio.h>
#include "sumas.h"

int main(int argc, char* argv[]) {
    int a, b;
    scanf("%d %d\n", &a, &b);
    printf("%d\n", sumas(a, b));
}

$ cat sumas.py
def sumas(a, b):
    print 'Hola, mundo!'
    return a + b

$ cat sumas.idl
interface Main {
};

interface sumas {
    int sumas(int a, int b);
};

$ java -jar libinteractive.jar generate sumas.idl cpp py --makefile
$ make run < input
[Main] 3
[ sum] Hola, mundo!

Memory:   5.023 MB
Time:     0.011 s

También puedes agregar la bandera --verbose a libinteractive para imprimir mensajes de depuración cada vez que se realiza una llamada entre los procesos.

Descarga

Puedes descargar el .jar más reciente de la página de descargas.