PRACTICA DE PRAP - JUEGO DE PRUEBAS PÚBLICO Esquema de este documento: 0. Observaciones previas. 1. Composición de los juegos de pruebas. 2. Entrada y salida de las operaciones. 3. Juego de pruebas público. ------------------------------------------------------------------------------- 0. OBSERVACIONES PREVIAS ------------------------------------------------------------------------------- * Para una ejecución, el número de organismos es constante. Dicho número (N, entero mayor que 0) se lee al principio de la ejecución. * Para una ejecución, el número de células es constante. Dicho número (T, entero mayor que 0) se lee al principio de la ejecución. * Los ficheros de entrada de los juegos de pruebas tendrán líneas de menos de 80 caracteres. Si necesitamos datos muy grandes para una misma operación, los dividiremos en varias líneas. * Nunca se introducirán datos no válidos. ------------------------------------------------------------------------------- 1. COMPOSICIÓN DE LOS JUEGOS DE PRUEBAS ------------------------------------------------------------------------------- En primer lugar se leen el número de células (T) y el número de organismos (N). A continuación se leen las T células y los N organismos. Los tipos de las células deben asignarse correlativamente según el orden de lectura, es decir, la primera célula que se lea tendrá tipo 1, la segunda tipo 2, etc. Para cada célula se leerá en primer lugar su calidad y luego el número de células libres que hay disponibles En el caso de los organismos, los identificadores seguirán el mismo patrón que los tipos de células, es decir, el primer organismo que se lea tendrá identificador 1, el segundo 2, etc. Para cada organismo se leerá, en primer lugar, su presupuesto, y luego su estructura, que se presenta con el formato de un árbol binario. Cada árbol entrará en preorden. Cada nodo contendrá un entero mayor que cero y menor o igual que T, que se interpreta como el tipo de célula al que representa. Un árbol vacío consistirá en un 0. A partir de aquí se aplican las operaciones abajo comentadas. Cada operación se identifica mediante un código numérico, que será un entero negativo entre -1 y -12 (esto se ha elegido simplemente para favorecer la legibilidad de los juegos de pruebas). Cada operación comenzará con su código y a éste le seguirán los datos de la misma, si es que necesita alguno. Se garantiza que no aparecerán códigos inexistentes. ------------------------------------------------------------------------------- 2. ENTRADA Y SALIDA DE LAS OPERACIONES ------------------------------------------------------------------------------- Seguidamente detallamos los elementos propios de las diferentes operaciones. Se garantiza que los valores proporcionados serán válidos según los convenios expuestos en el enunciado y en este documento. Para ver ejemplos concretos de la sintaxis de sus entradas y salidas, id al apartado 3. * REALIZAR UNA RONDA Identificador: -1 Entrada: NO HAY ENTRADA Salida: NO HAY SALIDA Efectos de la operación sobre el sistema: se efectúa una ronda de enfrentamientos entre todos los organismos y se genera la clasificación correspondiente y toda la demás información de los organismos y tipos de células. * OBTENER EL RESULTADO DEL ÚLTIMO ENFRENTAMIENTO ENTRE 2 ORGANISMOS Identificador: -2 Entrada: los identificadores de los dos organismos que queremos consultar (son dos números entre 1 y N diferentes entre si). Salida: dos números enteros que representan las células ganadoras de cada organismo en su enfrentamiento. Efectos de la operación sobre el sistema: NO TIENE EFECTOS. * OBTENER RANKING Identificador: -3 Entrada: NO HAY ENTRADA. Salida: escribe para todos los organismos (en el orden definido en el enunciado) el identificador del organismo, su puntuación en la ronda, el número de células vencedoras del mismo a lo largo de todos los enfrentamientos y el número de células derrotadas del mismo a lo largo de todos los enfrentamientos. Efectos de la operación sobre el sistema: NO TIENE EFECTOS. * ACTUALIZAR CALIDADES Y PRECIOS Identificador: -4 Entrada: NO HAY ENTRADA. Salida: escribe los rendimientos de las células por orden de id. de tipo de célula. Efectos de la operación sobre el sistema: actualiza las calidades de las células (y sus precios) respecto a su rendimiento en la última ronda. * EVOLUCIONAR Identificador: -5 Entrada: NO HAY ENTRADA. Salida: NO HAY SALIDA. Efectos de la operación sobre el sistema: hace evolucionar todos los organismos actualizando toda la información necesaria. * CONSULTAR ESTRUCTURA ORGANISMO Identificador: -6 Entrada: un entero entre 1 y N que representa un identificador de organismo. Salida: muestra la estructura del organismo, como un árbol de enteros escrito en inorden. Efectos de la operación sobre el sistema: NO TIENE EFECTOS. * CAMBIAR PRESUPUESTO Identificador: -7 Entrada: un entero entre 1 y N que representa un identificador de organismo y otro entero (mayor o igual que 0) que será el nuevo presupuesto. Salida: NO HAY SALIDA. Efectos de la operación sobre el sistema: sustituye el presupuesto del organismo que se ha dado por la cantidad introducida. * CAMBIAR CALIDAD Identificador: -8 Entrada: un entero entre 1 y T que representa un tipo de célula y otro entero (mayor o igual que 0) que sera la nueva calidad de la célula. Salida: NO HAY SALIDA. Efectos de la operación sobre el sistema: sustituye la calidad de la célula que se ha dado por la cantidad introducida y actualiza el precio (siguiendo los criterios del límite al cambiar el precio). * CAMBIAR LIBRES Identificador: -9 Entrada: un entero entre 1 y T que representa un tipo de célula y otro entero (mayor o igual que 0) que sera el nuevo número de células libres Salida: NO HAY SALIDA. Efectos de la operación sobre el sistema: sustituye la cantidad de células libres del tipo por la nueva cantidad introducida. * CONSULTAR CÉLULA Identificador: -10 Entrada: un entero entre 1 y T que representa un tipo de célula. Salida: muestra la calidad, el precio, la cantidad de células libres, el número de victorias, el número de derrotas, el número de empates y el número de victorias con bonus de ese tipo de célula. Efectos de la operación sobre el sistema: NO TIENE EFECTOS. * CONSULTAR PRESUPUESTO Identificador: -11 Entrada: un entero entre 1 y N que representa un identificador de organismo. Salida: muestra el presupuesto del organismo. Efectos de la operación sobre el sistema: NO TIENE EFECTOS. * SALIR DEL PROGRAMA Identificador: -12 ------------------------------------------------------------------------------- 3. JUEGO DE PRUEBAS PÚBLICO ------------------------------------------------------------------------------- Entrada comentada: ... ------------------------------------------------------------------------------- 10 4 // T y N 10 20 // Células: calidad + libres 20 20 30 20 45 20 15 20 10 20 35 20 20 20 5 20 10 20 1000000 1 2 4 0 0 0 3 0 0 // Organismos: presupuesto + estructura 1000000 4 2 1 0 0 0 7 8 0 0 6 0 0 1000000 5 1 0 0 8 7 0 0 6 0 0 1000000 5 7 0 1 0 0 0 -1 // Primera ronda -2 1 2 // Varias consultas de resultados -2 1 3 -2 1 4 -2 2 3 -2 2 4 -2 3 4 -3 // Mostrar Ranking -4 // Actualizar calidades -5 // Evolucionar los organismos -6 1 // Varias consultas de estructuras -11 1 // y presupuestos -6 2 -11 2 -6 3 -11 3 -6 4 -11 4 -10 1 // Varias consultas de tipos de células -10 2 -10 3 -10 4 -10 5 -10 6 -10 7 -10 8 -10 9 -10 10 -7 2 20000000 // Nuevo presupuesto del organismo 2 -8 10 40 // Nueva calidad de la célula 10 -9 8 543 // Nuevo número de libres de la célula 8 -10 8 // Consultar la célula 8 -10 10 // Consultar la célula 10 -11 2 // Presupuesto del organismo 2 -1 // Segunda ronda -2 1 2 // Varias consultas de resultados -2 1 3 -2 1 4 -2 2 3 -2 2 4 -2 3 4 -3 // Mostrar Ranking -10 1 // Varias consultas de tipos de células -10 2 -10 3 -10 4 -10 5 -10 6 -10 7 -10 8 -10 9 -10 10 -12 ------------------------------------------------------------------------------- Salida comentada: ------------------------------------------------------------------------------- Resultado 1 2 // Resultado organismos 1 y 2 1 2 Resultado 1 3 // Resultado organismos 1 y 3 2 1 Resultado 1 4 // Resultado organismos 1 y 4 1 1 Resultado 2 3 // Resultado organismos 2 y 3 3 1 Resultado 2 4 // Resultado organismos 2 y 4 1 0 Resultado 3 4 // Resultado organismos 3 y 4 0 0 Ranking // Ranking ronda 1 2 9 6 2 // Id Puntos Células_vencedoras Células_derrotadas 1 4 4 4 4 2 1 2 3 1 2 5 Rendimientos // Rendimientos en orden creciente del tipo de célula -50 -6 10 63 -34 0 32 -50 0 0 Estructura 1 // Estructura del organismo 1 4 9 7 3 Presupuesto 1 // Presupuesto del organismo 1 979000 Estructura 2 // Id para los organismos 2, 3 y 4 3 2 4 9 7 6 Presupuesto 2 986000 Estructura 3 3 5 7 4 6 Presupuesto 3 937000 Estructura 4 7 3 4 Presupuesto 4 933000 Atributos 1 // Atributos del tipo de célula 1 5 8000 24 0 2 0 0 // Calidad Precio Libres NVict NDerr NEmpat NVictBonus Atributos 2 // Id para el resto de tipos 18 18000 21 1 2 2 1 Atributos 3 33 33000 17 1 1 0 1 Atributos 4 73 54000 18 6 0 0 4 Atributos 5 9 12000 21 0 4 2 0 Atributos 6 10 10000 20 0 0 2 0 Atributos 7 46 42000 19 5 0 4 2 Atributos 8 10 16000 22 0 4 0 0 Atributos 9 5 5000 18 0 0 0 0 Atributos 10 10 10000 20 0 0 0 0 Atributos 8 // Atributos de la célula 8, (libres modificadas) 10 16000 543 0 4 0 0 Atributos 10 // Atributos de la célula 10, (calidad y precio modificados) 40 12000 20 0 0 0 0 Presupuesto 2 // Presupuesto modificado del organismo 2 20000000 Resultado 1 2 // Varios resultados de la segunda ronda 1 3 Resultado 1 3 1 1 Resultado 1 4 1 1 Resultado 2 3 1 3 Resultado 2 4 0 0 Resultado 3 4 0 1 Ranking // Ranking ronda 2 4 5 2 1 3 4 4 3 2 4 4 4 1 2 3 5 Atributos 1 // Atributos células tras ronda 2 5 8000 24 0 0 0 0 Atributos 2 18 18000 21 1 1 0 1 Atributos 3 33 33000 17 1 6 0 1 Atributos 4 73 54000 18 8 0 4 2 Atributos 5 9 12000 21 0 1 0 0 Atributos 6 10 10000 20 0 0 2 0 Atributos 7 46 42000 19 3 4 4 3 Atributos 8 10 16000 543 0 0 0 0 Atributos 9 5 5000 18 0 1 0 0 Atributos 10 40 12000 20 0 0 0 0 Al final puede haber una línea en blanco o más. ------------------------------------------------------------------------------- Entrada sin comentar: cortadla y pegadla en un fichero para usarla como entrada para vuestro programa mediante la redirección <. La entrada se ha de poder procesar si donde hay un blanco, tabulador o salto de línea se ponen dos o más (por ejemplo, para separar las distintas acciones) o si donde hay dos o más saltos de línea sólo se pone uno. ------------------------------------------------------------------------------- 10 4 10 20 20 20 30 20 45 20 15 20 10 20 35 20 20 20 5 20 10 20 1000000 1 2 4 0 0 0 3 0 0 1000000 4 2 1 0 0 0 7 8 0 0 6 0 0 1000000 5 1 0 0 8 7 0 0 6 0 0 1000000 5 7 0 1 0 0 0 -1 -2 1 2 -2 1 3 -2 1 4 -2 2 3 -2 2 4 -2 3 4 -3 -4 -5 -6 1 -11 1 -6 2 -11 2 -6 3 -11 3 -6 4 -11 4 -10 1 -10 2 -10 3 -10 4 -10 5 -10 6 -10 7 -10 8 -10 9 -10 10 -7 2 20000000 -8 10 40 -9 8 543 -10 8 -10 10 -11 2 -1 -2 1 2 -2 1 3 -2 1 4 -2 2 3 -2 2 4 -2 3 4 -3 -10 1 -10 2 -10 3 -10 4 -10 5 -10 6 -10 7 -10 8 -10 9 -10 10 -12 ------------------------------------------------------------------------------- Salida sin comentar: vuestro resultado ha de coincidir exactamente con éste (probándolo con el comando diff -Bb de Linux), salvo las líneas en blanco del principio y del final, que pueden variar. ------------------------------------------------------------------------------- Resultado 1 2 1 2 Resultado 1 3 2 1 Resultado 1 4 1 1 Resultado 2 3 3 1 Resultado 2 4 1 0 Resultado 3 4 0 0 Ranking 2 9 6 2 1 4 4 4 4 2 1 2 3 1 2 5 Rendimientos -50 -6 10 63 -34 0 32 -50 0 0 Estructura 1 4 9 7 3 Presupuesto 1 979000 Estructura 2 3 2 4 9 7 6 Presupuesto 2 986000 Estructura 3 3 5 7 4 6 Presupuesto 3 937000 Estructura 4 7 3 4 Presupuesto 4 933000 Atributos 1 5 8000 24 0 2 0 0 Atributos 2 18 18000 21 1 2 2 1 Atributos 3 33 33000 17 1 1 0 1 Atributos 4 73 54000 18 6 0 0 4 Atributos 5 9 12000 21 0 4 2 0 Atributos 6 10 10000 20 0 0 2 0 Atributos 7 46 42000 19 5 0 4 2 Atributos 8 10 16000 22 0 4 0 0 Atributos 9 5 5000 18 0 0 0 0 Atributos 10 10 10000 20 0 0 0 0 Atributos 8 10 16000 543 0 4 0 0 Atributos 10 40 12000 20 0 0 0 0 Presupuesto 2 20000000 Resultado 1 2 1 3 Resultado 1 3 1 1 Resultado 1 4 1 1 Resultado 2 3 1 3 Resultado 2 4 0 0 Resultado 3 4 0 1 Ranking 4 5 2 1 3 4 4 3 2 4 4 4 1 2 3 5 Atributos 1 5 8000 24 0 0 0 0 Atributos 2 18 18000 21 1 1 0 1 Atributos 3 33 33000 17 1 6 0 1 Atributos 4 73 54000 18 8 0 4 2 Atributos 5 9 12000 21 0 1 0 0 Atributos 6 10 10000 20 0 0 2 0 Atributos 7 46 42000 19 3 4 4 3 Atributos 8 10 16000 543 0 0 0 0 Atributos 9 5 5000 18 0 1 0 0 Atributos 10 40 12000 20 0 0 0 0 ------------------------------------------------------------------------------