EXÁMEN DE LA PRÁCTICA DE PRO2 Cuatrimestre primavera 2013 - JUEGO DE PRUEBAS PÚBLICO

Esquema del 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 funcionarios (N, entero mayor que 0), el
  número de días de la agenda (D, entero mayor que 0) y el número de días ya
  pasados sobre los que se guarda información (K, entero mayor que 0) se leen 
  como datos de inicialización y no cambian a lo largo de la ejecución.

* Los identificadores de los N funcionarios son enteros entre 1 y N.

* En general, los datos de operaciones diferentes se leerán en líneas
  diferentes y los resultados de operaciones diferentes se escribirán en líneas
  diferentes.

* 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.

* No es necesario comprobar si los datos que se van a leer son consistentes,
  por ejemplo, si se dice que hay N funcionarios, está garantizado que se
  podrán leer, todos los identificadores de funcionarios estarán entre 1 y N,
  etc. Análogamente, no habrá inconsistencias con los días, las horas,
  etc. También se garantiza que los datos cumplirán las precondiciones
  mencionadas en el enunciado.

* A partir del juego de pruebas incluido al final de este documento no se deben
  extrapolar propiedades de los datos que no se describan explícitamente.  Por
  ejemplo, no es obligatorio que el día de registro de la primera operación sea
  el 1, o que todas las citas se puedan concertar el día para el que se piden,
  o que el número o la proporción de aplicaciones de las diversas operaciones
  sean parecidos en general al de dicho juego de pruebas.

-------------------------------------------------------------------------------
1. COMPOSICIÓN DE LOS JUEGOS DE PRUEBAS
-------------------------------------------------------------------------------

La primera acción es leer el número N de funcionarios. A continuación se lee el
número D de días de la agenda. Después se lee K, el número de días ya pasados
sobre los que se guardan datos.

A continuación se lee la estructura jerárquica de los N funcionarios.  Ésta
sigue el formato estándar de lectura de un árbol en preorden que se ha visto en
la sesiones de laboratorio, con una marca igual a 0.

A partir de este momento, pasamos a aplicar las distintas operaciones, cuya
estructura viene especificada en la siguiente sección. Todas las operaciones
llevan asociado un día de registro, que representa el momento en el que se
realiza cada operación. En un mismo día se pueden aplicar 0 o más operaciones y
cada operacion tiene un día de registro mayor o igual que el de la anterior.

Se usarán los días de registro para mantener como vivas solo las citas que
estén en los siguientes D días, y como citas ya realizadas las citas de los K
días anteriores. Por tanto, si el día de registro es mayor que el de la
anterior operación, *antes de realizar la nueva operación* algunas citas vivas
pueden pasar a ser citas ya realizadas, y algunas citas ya realizadas pueden
desaparecer por completo.

-------------------------------------------------------------------------------
2. ENTRADA Y SALIDA DE LAS OPERACIONES
-------------------------------------------------------------------------------

* PETICIÓN DE CITA

Código de operación: -1

Datos: Dos números enteros mayores que 0. El primero representa el día de
registro, es decir, el día en que se hace la petición de la cita. El segundo
indica a partir de qué día se intentará satisfacer la petición.

Salida: Ninguna.

Efectos sobre el sistema: 

- Si existen un día y un funcionario que cumplan las condiciones de
la petición, se añadirá una nueva cita a la agenda. Cada cita se dotará de un
identificador propio, en orden correlativo creciente (la primera cita tendrá el
identificador 1, la segunda el 2, etc).

- Si el día de registro crece, previamente se actualizarán las citas vivas y
las ya realizadas.


* ESCRITURA DE CITAS YA REALIZADAS

Código de operación: -3

Datos: Un entero mayor que 1 que representa el día de registro de la petición
de escritura. Nótese que si el entero fuera 1, no habría ningún día anterior al
día de registro. Si el entero es 2 hay un día anterior.

Salida: Escribe el intervalo de días cuyas citas se van a escribir. El
intervalo acaba el día anterior al día de registro y comienza el día 1 o K días
antes al día de registro, dependiendo de cual de esos dos valores sea mayor. A
continuación, escribe todas las citas de dicho intervalo.  Puede darse el caso
que no haya ninguna cita en el mismo.

Efectos sobre el sistema: si el día de registro crece, se actualizarán las
citas vivas y las ya realizadas. La escritura del intervalo y las citas ha de
hacerse después de la actualización.


* ESCRITURA DE CITAS VIVAS

Código de operación: -4

Datos: Un entero mayor que 0 que representa el día de registro de la
escritura. 

Salida: Escribe el intervalo de días cuyas citas se van a escribir. El
intervalo comienza el día posterior al día de registro y acaba D días después.
A continuación, escribe todas la citas del intervalo. Puede darse el caso que
no haya ninguna cita viva en el mismo.

Efectos sobre el sistema: si el día de registro crece, se actualizarán las
citas vivas y las ya realizadas. La escritura del intervalo y las citas ha de
hacerse después de la actualización.


* FINALIZAR PROGRAMA

Código de operación: -5

Datos: Ninguno

Salida: Ninguna

-------------------------------------------------------------------------------
3. JUEGO DE PRUEBAS PÚBLICO
-------------------------------------------------------------------------------

Entrada comentada:
------------------

9       // N: número de funcionarios
6       // D: número de días posteriores 
3       // K: número de días anteriores

4 7 5 2 0 0 0 9 0 0 8 1 6 0 0 0 3 0 0  // Estructura jerárquica 
                                       // de los funcionarios

     
-1 1 2    // Petición de cita
              // Petición hecha el día 1
              // a partir del día 2

-1 1 3    // Petición de cita
              // Petición hecha el día 1
              // a partir del día 3

-1 1 4    // Otras peticiones de citas 

-1 1 5

-1 1 6

-1 1 7

-4 1          // Escribe las citas vivas de los D días posteriores al día 1,
              // es decir, del 2 al 7 

-4 2          // Escribe las citas vivas de los D días posteriores al día 2,
              // es decir, del 3 al 8 (después de haber actualizado las citas,
              // ya que el día ha cambiado)

-3 2          // Escribe las citas realizadas el día 1,
              // es decir, los min (K,1) días anteriores al día 2

-1 3 5

-4 3

-3 5          // Escribe las citas realizadas desde el día 2 al 4
              // (es decir, los K días anteriores al 5)

-5

Salida comentada:
-----------------

Citas vivas: el intervalo relevante de dias es 2 7
               // Se escriben las citas vivas desde el día 2 al día 7

2 4 1		// El día 2, el funcionario 4 tiene una cita
           	// y el identificador de la cita es el 1

3 4 2		// Resto de citas desde el día 3 al día 7
4 4 3
5 4 4
6 4 5
7 4 6

Citas vivas: el intervalo relevante de dias es 3 8
3 4 2
4 4 3
5 4 4
6 4 5
7 4 6

Citas ya realizadas: el intervalo relevante de dias es 1 1 
               // Se escriben las citas realizadas el día 1.
               // No hay ninguna.

Citas vivas: el intervalo relevante de dias es 4 9
4 4 3
5 4 4
5 7 7
6 4 5
7 4 6

Citas ya realizadas: el intervalo relevante de dias es 2 4
               // Se escriben las citas realizadas desde el día 2 al 4.
2 4 1
3 4 2
4 4 3

-------------------------------------------------------------------------------

Entrada sin comentar: 

ver ficheros jpub1.in y jpub2.in

-------------------------------------------------------------------------------

Salida sin comentar: 

ver ficheros jpub1.out y jpub2.out
