Primera Evaluación de Temas Selectos de Sistemas
Jueves 12 de mayo de 2005 (13:00 a 15:55)

Instrucciones: Deberán resolver dos problemas, por lo que me deberán entregar dos códigos fuente, uno para cada problema. Cada problema se evaluará con 10 casos de prueba y cada uno de ellos vale 1 punto. Pongan un comentario en su código indicando los dos integrantes del equipo. La lectura se hará desde la entrada estándar y la escritura hacia la salida estándar. En sus pruebas, usen la redirección de entrada y salida.

Problema 1.6.2: Buscaminas (bminas.c, bminas.cpp ó bminas.java)

¿Has jugado alguna vez al Buscaminas? Este es un jueguito que viene con un cierto sistema operativo cuyo nombre no puedo recordar. El objetivo del juego es el de encontrar dónde están localizadas todas las minas en un campo de M por N.

El juego muestra un número en un cuadro que te dice cuántas minas hay adyacentes a ese cuadro. Cada cuadro tiene a lo mucho ocho cuadros adyacentes. El campo de 4 por 4 de la izquierda contiene dos minas, representadas por el caracter "*". Si representamos el mismo campo usando las pistas descritas arriba, terminamos con el campo de la derecha:

*...     *100
....     2210
.*..     1*10
....     1110

Entrada: La entrada consistirá de un número arbitrario de campos. La primera línea de cada campo contendrá dos enteros N y M (0 < N,M <= 100) que significan el número de renglones y de columnas del campo, respectivamente. Cada una de las siguientes N líneas contiene exactamente M caracteres, representando el campo. Los cuadros seguros se denotan con un "." y los cuadros con minas con un "*", ambos sin las comillas. La primera línea de un campo donde N = M = 0 representa el fin de la entrada y no debe ser procesada.

Salida: Para cada campo, imprime el mensaje Field #X: en una línea sóla, donde X significa el número de campo comenzando desde el 1. Las siguientes N líneas deben contener el campo con los caracteres "." reemplazados por el número de minas adyacentes a ese cuadro. Debe haber una línea en blanco entre las salidas de cada campo.

Ejemplos: Entrada y salida. Para usar este ejemplo, escriban bminas < bminas.ent > bminas.txt y comparen bminas.txt con bminas.sal

Problema 2.8.3: Huelgas (huelga.c, huelga.cpp ó huelga.java)

Los partidos políticos en Bangladesh muestran su poderío convocando a huelgas regulares, las cuales causan enorme daño económico. Para nuestros propósitos, cada partido político se puede caracterizar por un entero positivo H llamado su parámetro de huelga que denota el número promedio de días entre dos huelgas convocadas por ese partido político.

Considere tres partidos políticos. Suponga que H1 = 3, H2 = 4 y H3 = 8, donde HI es el parámetro de huelga del partido político I. Podemos simular el comportamiento de estos tres partidos por N = 14 días. Siempre comenzaremos la simulación en domingo. No hay huelgas ni viernes ni sábados.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
Días
Do
Lu
Ma
Mi
Ju
Vi
Sa
Do
Lu
Ma
Mi
Ju
Vi
Sa
Partido 1


X


X


X


X


Partido 2



X



X



X


Partido 3







X






Huelgas


1
2



3
4


5



Habrá exactamente 5 huelgas (en los días 3, 4, 8, 9 y 12) durante los 14 días. No hay huelga el día 6 porque cae en viernes. Por lo tanto perdemos cinco días de trabajo en dos semanas.

Dados los parámetros de huelga de varios partidos políticos y el valor de N, determine el número de días de trabajo perdidos en esos N días.

Entrada: La primera línea de la entrada consiste de un entero T dando el número de casos de prueba que siguen. La primera línea de cada caso de prueba contiene un entero N (7 <= N <= 3650) dando el número de días sobre los que debe correr la simulación. La siguiente línea contiene otro entero P (1 <= P <= 100) representando el número de partidos políticos. La I-ésima de las siguientes P líneas contiene un entero positivo HI (que nunca será un múltiplo de 7) que es el parámetro de huelga del partido I (1 <= I <= P).

Salida: Para cada caso de prueba, escriba el número de días de trabajo perdidos en una línea aparte.

Ejemplos: Entrada y salida. Para usar este ejemplo, escriban huelga < huelga.ent > huelga.txt y comparen huelga.txt con huelga.sal