EXAMEN DE LA PRACTICA DE PRO2 - 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 valor M que determina el número de cocheras es
  constante.  Dicho valor M es un entero mayor que 0 y se lee como dato de
  inicialización.

* Nunca se introducirán datos no válidos.

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


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

En primer lugar se lee el número M que determina la cantidad de cocheras.

Luego se leen los datos de las M cocheras.  Los identificadores de las cocheras
van de 1 a M, y no se han de leer. Por orden de identificador se leerá el
contenido de cada cochera. El primer valor nos indica el número de vagones
nuevos y a continuación los vagones. El número de vagones puede ser mayor o
igual que cero.  Un vagón puede ser cualquier natural mayor que 0. El orden de
los vagones es relevante: el primer vagón leído será el primer vagón
almacenado, y así sucesivamente.

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
-4 (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 de operación 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.

Todas las operaciones que realicen alguna escritura, es decir, las operaciones
-1 y -3, dejarán una línea en blanco al final.

* FORMACIÓN MATINAL

Identificador: -1

Entrada: se lee el tren que se va a formar: Primero se lee el número de vagones
y, a continuación los vagones.  Se garantiza que en las cocheras habrá vagones
suficientes para formar el tren usando la política descrita en el enunciado
original.

Salida: se escribe la secuencia de movimientos necesaria para completar la 
configuración del tren. Los movimientos se escriben agrupados por la cochera 
en la que se realizan. Para cada cochera, en orden de identificador, se escribirá 
su identificador y la secuencia de movimientos realizados en dicha cochera. 
Si antes de acabar la formación se trata alguna cochera de la que no se extrae 
ningún vagón, solo se escribirá el identificador de dicha cochera pero ningún 
movimiento. Las cocheras restantes después de acabar la formación no 
aparecerán en la salida.  Para cada movimiento se indica su tipo (1, 2 ó 3) 
y el vagón que se mueve.  El tren se forma siguiendo el orden de los vagones 
de su configuración.

Efectos de la operación sobre el sistema: los vagones usados para formar los
trenes se eliminan de las cocheras. El resto quedan el mismo orden en el que
estaban.


* AÑADIR VAGONES A LAS COCHERAS

Identificador: -2

Entrada: se leen los datos de las M cocheras por orden creciente de
identificador.  Los identificadores de las cocheras van de 1 a M, y no se han
de leer. Para cada cochera se lee el número de vagones nuevos seguido de éstos.

Salida: NO TIENE SALIDA.

Efectos de la operación sobre el sistema: añade un número mayor o igual a cero
de vagones a cada cochera (no elimina los vagones que ya pudieran estar en
cada cochera). Los últimos vagones leídos son los que primero se usarán en la
formación.


* ESCRIBIR COCHERAS

Identificador: -3

Entrada: NO TIENE ENTRADA.

Salida: escribe el contenido de las cocheras, en orden de identificador. Para
cada cochera se escriben su identificador y los vagones que contiene. Primero se
escribe el vagón que lleva más tiempo en la cochera y así sucesivamente.

Efectos de la operación sobre el sistema: NO TIENE EFECTOS.

* SALIR DEL PROGRAMA

Identificador: -4


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

Entrada comentada:

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

3               // M cocheras

                // Lectura de las M cocheras:      
4 1 2 3 4       // número de vagones nuevos, secuencia de vagones
0               // si una cochera no recibe vagones, solo se lee un 0  
0

-3              // Escribir el contenido de las cocheras

-1              // Formación matinal
4 1 2 3 4       // Lectura del tren. Número de vagones, secuencia de vagones

-3

-2              // Añadimos vagones a las cocheras:
4 4 3 2 1       // número de vagones nuevos, secuencia de vagones 
0               // si una cochera no recibe vagones nuevos, solo se lee un 0  
0
            
-3            

-1
4 1 2 3 4

-3

-2
1 1
1 2
1 3

-3

-1
3 1 2 3

-3

-2
0
0
4 1 2 3 4

-3

-1
4 1 2 3 4

-3

-4            // Fin del programa

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

Salida comentada:

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

// Escribimos las cocheras después de la inicialización (-3)

Cocheras
1 : 1 2 3 4
2 :
3 :

// Movimientos de la primera formación matinal (-1)

Movimientos para la formacion matinal
 Cochera 1: 2 4  2 3  2 2  1 1  3 2  1 2  3 3  1 3  3 4  1 4  

// Escribimos las cocheras después de la primera formación

Cocheras
1:
2:
3:

// Escribimos las cocheras despues de añadir vagones nuevos (-2)

Cocheras
1 : 4 3 2 1
2 :
3 :

// Movimientos de la segunda formación matinal

Movimientos para la formacion matinal
 Cochera 1: 1 1  1 2  1 3  1 4  

// Escribimos las cocheras después de la segunda formación matinal

Cocheras
1 :
2 :
3 :

// Escribimos las cocheras despues de añadir vagones nuevos por segunda vez

Cocheras
1 : 1
2 : 2
3 : 3

// Movimientos de la tercera formación matinal

Movimientos para la formacion matinal
 Cochera 1: 1 1  
 Cochera 2: 1 2  
 Cochera 3: 1 3  

// Escribimos las cocheras después de la tercera formación matinal
Cocheras
1 :
2 :
3 :

// Escribimos las cocheras después añadir vagones nuevos por tercera vez

Cocheras
1 :
2 :
3 : 1 2 3 4

// Movimientos de la tercera formación matinal

Movimientos para la formacion matinal
 Cochera 1: 
 Cochera 2: 
 Cochera 3: 2 4  2 3  2 2  1 1  3 2  1 2  3 3  1 3  3 4  1 4  

// Escribimos las cocheras después de la cuarta formación matinal

Cocheras
1 :
2 :
3 :


Al final puede haber una línea en blanco o más.

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

Entrada sin comentar: 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.

ver ficheros jpub1.in y jpub2.in
-------------------------------------------------------------------------------

Salida sin comentar: vuestro resultado ha de coincidir exactamente con este
(probándolo con el comando diff -Bb de Linux), salvo las líneas en blanco del
principio y del final, que pueden variar.

ver ficheros jpub1.out y jpub2.out
-------------------------------------------------------------------------------
