FAQ

This Frequently Asked Questions contains answers to the most common questions, in general to all previous Coretex events.


Phase 1: Construction

In the construction fase, the program to send should be an .c or .cpp file (acm type) or a fragment with some particular definition that is to be compiled together with additional code (topcoder type)?

The presented program should be a complete c or cpp file, including headers, main() function, etc.


What type of compiler will be used?

The compiler is GCC version 3.3.5.


Is there any type of feedback when a program is submitted? Can it be known if it was compiled correctly or correctly process any test case?

Yes, each time a program is sbmitted it is compiled and tested against the statement of the programs examples (with very small modifications). The participant can check in the page the result of this test.


There are restrictions to the compiled programs?

The compiled programs should use a restricted environment to run, limited to communication throught standard in (stdin/cin) and standard our (stdout/cout). They won't have the avility to use temporary files or any other operating system resources.


Is there a timeout for the running of the programs submitted?

The programs should resolve each test case presentes in 5 seconds or less, running in the jury test equipment (see specifications).


The submitted code or test cases have any limit in size? What about the memory the program uses when running?

Source code cannot be bigger than 64 KB and allowed memory usage is 128Mb.

Likewise, test cases presented to test the programs will be 64Kb or less, also complaining to any restrictions given in the problem statement.


Can library code be used?

Participants can use their own library code. Third party libraries or code are not allowed.


Examples of C++ (there are many in Internet) are considered third party?

Yes.


Can a program be resend if an error is found after the first delivery?

Yes, without affecting the score. Take into account that in case of a score tie, the date and time of the delivery will be used to determine the winner.


If I send multiple programs with different solutions to the program statement test cases, how are these handled? How affects my score? it How works in a tie situation?

The code considered the presented solution is the last one received, even if this one does not compile or do not handle test cases correctly. Last presented solution time and date will be use to untie.


Is it possible to upload files .C and get them compiled as C++?

Yes, C or C++ files are treat in the same way, and compiled via the compiler the participant selects on the upload page. Filename extension of the submited file is ignored.


Is the GCC STL going to be available?

Yes, it is going to be available.

Phase 2: Deconstruction

What does "exploit a program" mean? (Useful for Coretex4 and Coretex5-Ekoparty events)

To exploit a program with a test case means to make the program print "exploited!" on stdout after an execution limited to 5 seconds. The fact that the programs runs for more than 5 seconds or ends abnormally does not affect this criterion.

Notes:
- The program may execute printf() and crash.
The instruction setvbuf(stdout, 0, _IONBF, 0) specifies that no buffering of stdout should be done, this way the result of printf is printed anyway.
- Spaces, enters or tabs before and after the word "exploited!" are not taken into account.
- Comparison is case-sensitive (use lower case letters)
- If the program executes any type of operation to open files, use the network or execute other programs, it will be inmediately terminated (the only accepted syscalls are read/write from stdin/stdout or exit).


When are two test cases considered different?

For each test case received, the set of resolved or exploited programs is determined in the way indicated by the rules. Two test cases are considered different, only if the set of resolved or exploited programs is different. It means that two test cases will be considered different if and only if one of them resolves or exploits a program that the other does not resolve or exploit.


What is an "original" test case?

A test case is considered "original" when it is "different" from the test cases previously sent. In an event with Construction Phase, a test case is compared with all received test cases of all participants. In an event without Construction Phase, differently from above, each participant test cases are independent from the test cases or other participants.


Which test cases affect my score?

Each contestant increases his score when he sends an original test case. In an event with Construction Phase, this may affect the sender's score, if it is original, and also affects the resolution score of all tested programs. In an event without Construction Phase, the only score that can be affected is the one of the participant sending the test case.


Is there a limit to the number of test cases that a participant can send?

In the event that execution machines are overloaded, each participant can have a maximum of 5 test cases waiting for execution (the following requests will be ignored, until one of the pending test cases is executed), to give everybody a chance of participating. But there are no limits in the total number of cases that can be sent by each participant.


Being no limit to the quantity of test cases that can be sent, will the score be negatively affected by senting a big quantity of cases, even potentially repeted ones?

No, repeated test cases do not affect the score.


What information of a given solution (participant/problem) will be available in the deconstruction phase?

The last source code of each sender during phase 1 will be available and, also, a zip file containing all source code for all solutions presented by all participants.


Is it allowed to compile and run the code of other participants in my own computer?

Yes, it is allowed.


Is it allowed to use other C/C++ programs or tools to generate test cases to present?

Yes, it is allowed.


Score and winners

How is the score computed?

Events with two phases:

Phase 1 (construction)

The resolution score is computed as the sum of the points obtained on each problem. Score is calculated as the base score (in the program statement) multiplied by the percentage of test cases it succesfully resolved.

Phase 2 (deconstruction)

This phase score is the sum of the score obtained by all test cases sent.

Score is calculated as percetage of failing programs multiplied by 31.62. For example, if a test case makes fail 5 out of 10 programs, the 50%, the given score will be 15.81 points.

Events with a single phase (Deconstruction):

The score is computed as the sum of the points obtained by each test case. The only test cases that give points are the original test cases (recall that two inputs are considered different only if the set of programs that they exploit are different).

Each original test case gives one point.


Sending test cases that do not solve or exploit any program decreases my score?

No, no points are substracted.


Can I lose points by sending any amount of test cases, inclusing repeated ones?

No, repeated test cases do not substract points.


If I send a test case that another participant has already sent, will I gain points?

Depending on the type of event. Only in events with a single phase (deconstruction) original test cases do not depend on testing cases sent by other participants.


To send a test case that solves or exploits more than one program gives me more points?

Yes, by solving or exploiting more than one program, it may result that the set of exploited programs is different from the previous ones, and that a points are earned with that test case.


How are ties breaked when two contestants have the same number of points?

To break ties, the moment (date and time, given by the jury's server) of reception of the last solution and test case that contributes to the score will be used: between two contestants with the same, the one who sent his last solution or test case earlier wins.


Being the first to send a test case gives me more points or some other benefit?

It doesn't give more points, but may influence the result in case of tie (see previous question).


Other questions about the competition

What are the characteristics of the machine where the tests are run?

The Server where programs will be executed with received test cases is a Pentium 4 (2.8 GHz) with 1 GB of RAM running OpenBSD. In the OpenBSD environment, the system variable stackgap_random is assigned the value 0. To change that value in your machine execute sysctl kern.stackgap_random=0.

OpenBSD is a free operating system, that can be downloaded from openbsd.org. In particular you can download it from the argentine mirror. Having an OpenBSD installed is not necessary to participate, but may give an advantage.

A convenient way of using this operating system is to run it in a VMware image.


What type and version of compiler will be used?

We use gcc version 3.3.5 to compile the proposed programs.

The compilation options used for C code:
gcc -Wl,-Z -lz -fno-stack-protector -g -o $@ $@.c

for C++ code:
g++ -Wl,-Z -lz -fno-stack-protector -g -o $@ $@.cpp


Who can participate?

Anyone 14 year old by the time the event starts can participate. It is not allowed to employees or executives of Core Security Technologies nor their direct family to participate in this event. It is necesary an internet conection to be able to participate.


Is group participatin allowed?

Participation in the competition is individual. Group participation is not allowed. Any kind of collaboration between contestants is not allowed.


Can I make an association with another participant and send the same test cases?

No. The jury reserves the right to use appropriate tools to identify violations to this rule and disqualify involved contestants.


Will I have access to the program binaries during the competition?

Yes. They will be included in the file containing all sources. Note that these are OpenBSD binaries.





Preguntas frecuentes:

Estas preguntas frecuentes contienen respuestas para las preguntas mas comunes recibidas durante todas las competencias anteriores de Coretex.


Fase 1: Construcción

En la fase de construcción, el programa tiene que ser un archivo .c ó .cpp completo (tipo acm) o es un fragmento con alguna definición en particular que se compila con mas código (tipo topcoder)?

Tiene que ser un archivo .c ó .cpp completo, incluyendo headers, funcion main(), etc.


Que compilador se usará?

Se usará el compilador GCC version 3.3.5.


Hay algún tipo de validación cuando se manda un programa? Se puede saber si compiló, si parsea correctamente algún ejemplo, etc?

Si, se compila el código y se ejecuta con casos de ejemplo similares a los del enunciado (pero ligeramente modificados). Se notifica al participante si su código compiló y pasó exitosamente los casos de ejemplo.


Que restricciones tendrán los programas compilados?

Los programas compilados deberán hacer un uso restringido del sistema, limitándose a la comunicación a través de la entrada estándar (stdin / cin) y salida estándar (stdout / cout). No tienen la posibilidad de usar archivos intermedios ni realizar ningún otro acceso al sistema operativo.


Hay un limite de tiempo para la ejecución de las soluciones propuestas?

Los programas deben resolver cada caso que se les plantee en 5 segundos de ejecución en la máquina del jurado (ver especificaciones del entorno de pruebas).


Hay un limite al tamaño del código fuente, de los casos de prueba y al uso de memoria?

Los códigos fuentes están limitados a un tamaño máximo de 64 KB y podrán utilizar como máximo 128 MB de memoria.

Así mismo, las entradas de los programas (casos de prueba) están limitadas a 64 KB y deberán cumplir con las restricciones definidas en el enunciado del problema.


Se puede usar código preescrito?

Los participantes pueden usar librerías personales. No está permitido usar código escrito por terceros.


Ejemplos del help de C++ (hay muchas páginas en Internet) se consideran código de terceros?

Si.


Se puede volver a mandar un problema si luego de hacerlo se descubrió que había algún error en la implementación?

Se puede volver a mandar la solución para un problema, sin penalización en el puntaje. Sin embargo, en caso de empate de puntaje, se usará el tiempo en que se recibió el ultimo envío de los participantes para determinar el ganador.


Si tengo un programa que pasa los casos de ejemplo, lo mando, y luego mando otro que no los pasa, me sigue contando el primer envio? Como influye esto en el desempate?

No, el código que se considera como solución del participante es el último código que mandó, aunque no compile o no pase los casos de prueba. Es el último envío de código el que se considera para el desempate.


Es posible mandar archivos ".c" y que sean realmente compilados como C?

Si, es posible mandar archivos C ó C++. Es una opción que se especifica en el momento de mandar el archivo (de hecho, no importa la extensión del archivo).


La STL estará disponible en el GCC para utilizar?

Si, estará disponible.


Fase 2: Deconstrucción

Que quiere decir explotar un programa? (Para los eventos Coretex4 y Coretex5-Ekoparty

Explotar un programa con un caso de prueba significa lograr que el programa imprima "explotado!" en la salida estándar después de una ejecución limitada a 5 segundos. Que el programa tarde más de 5 segundos o termine anormalmente no afecta este criterio.

Notas:
- Puede que el programa ejecute printf() y crashee.
La instrucción setvbuf(stdout, 0, _IONBF, 0) especifica que no se haga buffering de stdout, por lo cual el resultado de printf se imprime de todas maneras.
- No importan espacios, enters o tabs antes o después de la palabra "explotado!"
- La comparación es case-sensitive (importa que sean letras minusculas)
- Si el programa ejecuta cualquier tipo de operaciones para abrir archivos, utilizar la red o ejecutar otros programas, será terminado inmediatamente (las únicos syscalls aceptados son read/write de stdin/stdout o exit).


Cuando se consideran distintos dos casos de prueba?

Para cada caso de prueba recibido, se determina de la manera indicada el conjunto de programas solucionados o explotados. Dos casos de prueba se considerarán distintos solamente cuando el conjunto de programas solucionados o explotados es distinto. Vale decir que dos casos de prueba se considerarán distintos solo si uno de ellos resulve o explota un programa que el otro no.


Qué es un caso de prueba "original"?

Un caso de prueba se considera "original" cuando es "distinto" de los casos de prueba mandados previamente. En los eventos con Fase de Construcción, se compararán todos los casos de prueba recibidos por todos los usuarios. En los eventos sin Fase de Construcción, a diferencia de los anteriores, los casos originales de cada concursante no dependen de los casos de prueba mandados por los otros concursantes.


Que casos de prueba afectan el puntaje?

El concursante aumenta su puntaje cuando manda un caso de prueba original. En los eventos con Fase de Construcción eso puede afectar el puntaje del concursante que envia el caso de prueba, si este es original, y afecta el puntaje de resolución de todos los problemas probados. En los eventos sin Fase de Construcción solo se afectará, si corresponde, el puntaje del usuario que envia el caso de prueba.


Hay un limite a la cantidad de casos de prueba que puede mandar un participante?

En caso de que las maquinas de ejecución se vean sobrecargadas, cada participante podrá tener un máximo de 5 casos de prueba pendientes de ejecución (los siguientes pedidos serán ignorados, hasta que alguno de los casos pendientes sea ejecutado), para dar a todos una oportunidad de participar. Pero no hay límite a la cantidad total de casos que puede enviar cada participante.


Así como no hay limite en la cantidad de casos de prueba que se pueden enviar, tampoco se restan puntos por enviar cualquier cantidad de casos, potencialmente incluso repetidos?

No, los casos de prueba repetidos no restan puntos.


Que datos de un submit particular (participante/problema) estarán disponibles en la fase de deconstrucción?

Estará disponible el último código fuente enviado por cada participante de la fase 1 en el sitio de Coretex. También habrá un archivo zip con todos los códigos fuente para bajarse.


Esta permitido compilar/correr los códigos de otros en la computadora propia?

Si, está permitido.


Esta permitido utilizar programas en C++ u otras herramientas para la generación automática de casos de prueba?

Si, está permitido.


Puntaje y ganadores

Como se calcula el puntaje?

Eventos con dos fases:

Fase 1 (construcción)

El puntaje de resolución se calcula como la suma de los puntos obtenidos en cada problema. Los puntos obtenidos en un problema se calculan como el puntaje base del problema (que figura junto con en el enunciado) multiplicado por el porcentaje de casos de prueba que pasó exitosamente.

Fase 2 (deconstrucción)

El puntaje de deconstrucción se calcula como la suma de los puntos obtenidos por cada caso de prueba enviado.

Los puntos otorgados por un caso de prueba son iguales al porcentaje de programas que fallan multiplicado por 31.62. Por ejemplo, si un caso logra que fallen 5 soluciones de 10, o sea el 50%, el que envía el caso obtiene 15.81 puntos.

Eventos con una sola fase (Deconstrucción):

El puntaje se calcula como la suma de los puntos obtenidos por cada caso de prueba enviado. Los únicos casos que dan puntos son los casos originales (recordemos que dos casos se consideran distintos solamente cuando los conjuntos de programas que explotan son distintos). Cada caso de prueba original suma un punto (ver explicación de "original").


Enviar casos de prueba que no logran solucionar o explotar ningún programa resta puntos?

No, no restan puntos.


Tampoco se restan puntos por enviar cualquier cantidad de casos, potencialmente incluso repetidos?

Así es, los casos de prueba repetidos no restan puntos.


Si envio un caso de prueba que ya envió otro participante puedo sumar puntos?

Dependiendo del tipo de evento. Solo en los eventos con solo fase de deconstrucción los casos originales de cada concursante no dependen de los casos de prueba mandados por los otros concursantes.


Enviar un caso de prueba que soluciona o explota mas de un programa me da mas puntos o me beneficia de alguna manera?

Si, al solucionar o explotar mas de un programa, puede resultar que el conjunto de programas solucionados o explotados sea distinto de los anteriores, y por lo tanto que sumes puntos con ese caso de prueba.


Como se determinan los ganadores de los premios?

El primero y segundo puesto de la competencia se adjudicarán a los participantes con mayor puntaje total. Los premios se determinarán en cada competencia.

Habrá un premio especial para el participante de mayor puntaje total entre los que tengan entre 14 y 18 años (inclusive) al momento de inicio de la competencia.


Como se desempata si dos participantes coinciden en puntos?

En caso de empate, se usará el tiempo (día y hora, dado por el servidor del jurado) en el que se recibió el último envío de una solución o caso de prueba del participante que contribuya a su puntaje. Entre dos participantes con mismo puntaje gana el que haya tardado menos en realizar su último envío de solución o caso de prueba.


Ser el primero en enviar una solución o caso de test me da más puntos o me beneficia de alguna manera?

No otorga más puntos, pero puede influir en caso de desempate (ver pregunta anterior).


Otras preguntas sobre la competencia

Cuales son las características de la maquina donde se ejecutan las pruebas?

El servidor donde se ejecutarán los programas compilados contra los casos de prueba es un Pentium 4 (2.8 GHz) con 1 GB de RAM corriendo OpenBSD 4.3. En el entorno de OpenBSD la variable del sistema stackgap_random tiene asignado el valor 0. Para cambiar este valor en un ambiente de prueba del participante ejecutar sysctl kern.stackgap_random=0.

OpenBSD es un sistema operativo gratuito, que se pueden bajar de la página openbsd.org. En particular se lo pueden bajar del mirror argentino. No es requisito tener instalado un OpenBSD para poder competir, pero va a ser una ventaja competitiva.

Una forma cómoda de usar este sistema operativo es correrlo en una imagen de VMware.


Qué tipo y version de compilador se va a utilizar?

Usamos GCC version 3.3.5 para compilar los programas propuestos.

Las opciones de compilación usadas son para código en C:
gcc -Wl,-Z -lz -fno-stack-protector -g -o $@ $@.c

para código en C++:
g++ -Wl,-Z -lz -fno-stack-protector -g -o $@ $@.cpp


Quienes pueden participar?

Podrán participar todas las personas mayores de 14 años al momento de la competencia. No podrán participar del concurso los empleados ni autoridades de Core, ni sus familiares en primer grado de consanguinidad. Es necesario contar con conexión a internet para poder participar.


Se puede participar en forma grupal?

La participación en la competencia es individual. No está permitido participar en forma grupal, ni ningún tipo de colaboración entre los participantes.


Me puedo asociar con otro participante y enviar los mismos casos de prueba?

No. El jurado se reserva el derecho de usar las herramientas que estén a su disposición para identificar violaciones a estas reglas y descalificar a los participantes involucrados.


Durante la competencia tengo acceso a los binarios de los programas?

Si. Estan incluidos en el archivo fuentes.zip. Notar que son binarios generados para OpenBSD.