Está en la página 1de 5

IV Concurso anual de programacin Escuela Superior de Computo IPN (30 de Mayo 2012)

Problemas del IV Concurso de programacin


Dennis MacAlistair Ritchie
Todos los problemas a resolver debern ser resueltos con programas que trabajan con la entrada y salida estndar. Cada problema puntuara nicamente si se encuentra totalmente correcto. El equipo en realizar la mayor cantidad de problemas en un tiempo de 120 minutos resultar ganador, en caso de empate la plataforma PC^2 define al ganador con base en los tiempos en los que fueron aceptados cada uno de los problemas y las penalizaciones de cada equipo.
Los lenguajes disponibles son C, C++ y Java

01 El ratn digital y el laberinto


Existe un ratn digital el cual deber pasar por una matriz bidimensional de N x N, esta matriz puede verse como un laberinto el cual contiene diferentes caminos para salir de ella. Cada casilla de la matriz contiene un bit, el cual indica si la casilla es transitable 0 o si no lo es 1. Las casillas (1, 1) y (n, n) corresponden a la entrada y salida del laberinto y siempre son transitables. Dada una matriz con un laberinto, el problema consiste en disear un algoritmo que encuentre el camino ms corto para el ratn digital, para ir de la entrada a la salida. Considere los 4 movimientos posibles que se muestran sobre cada coordenada.

Figura 1 "Ejemplo N=6"

formato del ejemplo.

cada celda se separa por espacio. La salida del programa son las coordenadas separadas por espacio del camino a seguir a partir de la coordenada 1,1 hasta llegar a n,n. Segn el

La entrada ser N, seguido de la matriz, cada fila se separa por un salto de lnea y

La salida es la longitud del camino ms corto y cada una de las coordenadas (X,Y) separadas por un espacio, del
camino ms corto de (1,1) a (N,N).
Ejemplo N=6

Entrada
6 0 0 0 0 0 0 1 0 1 1 1 0 0 0 1 1 1 0 0 1 0 0 0 0 0 1 0 1 1 0 0 0 0 1 1 0

Salida
10 (1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (2,6) (3,6) (4,6) (5,6) (6,6)

Algunos comandos que interpretan los sistemas operativos, consideran al carcter *, para sustituir la secuencia de caracteres que le antecede o precede. A este carcter se le denomina metacaracter comodn. Por ejemplo, si en un determinado directorio con archivos fuente de programas escritos en lenguaje java, quisiramos compilar con java todos los archivos en forma rpida, nicamente escribiramos en consola javac *.java

02 Comandos y el metacaracter *

IV Concurso anual de programacin Escuela Superior de Computo IPN (30 de Mayo 2012)

Otro ejemplo, se ve si un usuario desea imprimir todos los archivos que terminan en .c o eliminar todos los archivos que comienzan con la palabra old o copiar todos los archivos en un medio de almacenamiento. Con el metacaracter comodn, todo esto se puede hacer utilizando slo tres comandos en lugar de utilizar un comando por separado para cada archivo en cuestin. Las secuencias metacarcter de estos comandos sera la siguiente: *.c old * * Implemente un programa que acepte un patrn de entrada que puede contener el carcter comodn y decidir que nombres de archivo coincide con el patrn.

nombres de los archivos, el fin de la lista de archivos est dado por un -1.

La entrada consiste en un conjunto de datos, la primera cadena indica el patrn de entrada y las siguientes son los La salida ser una lista con los nombres de los archivos que cumplen con el patrn establecido.

Ejemplo *Note que BAR.NPP no es valida

Entrada
B*N* NIBBLE.BIT BANANA BNXJ.25 BORN HELLO_WORLD.C ABNORMAL.LIS BRANDISH.SRD BITNET BAR.NPP -1

Salida
BANANA BNXJ.25 BORN BRANDISH.SRD BITNET

Considere la funcin f: f(1)=1 f(2n)=n f(2n+1)=f(n)+f(n+1)

03 Una funcin definida por induccin

Dado un entero positivo calcular el valor de f(n).

La entrada consiste en una secuencia de enteros positivos. La entrada terminara con -1.
Para cada entero positivo, mostrar a la salida el valor de n. Utilice el formato que se muestra en el ejemplo. Ejemplo

Entrada
1 2 153 -1

Salida
f(1) = 1 f(2) = 1 f(153) = 77

IV Concurso anual de programacin Escuela Superior de Computo IPN (30 de Mayo 2012)

Dada una secuencia de nmeros enteros, escriba un programa que identifique la subsecuencia ms larga de nmeros ordenados en forma ascendente.

04 Secuencia de nmeros

La entrada es una o ms secuencias de nmeros enteros (positivos, negativos y/o cero), cada una terminada
con un salto de lnea, cuando ya no hay ms secuencias se recibe una cadena FIN.

La salida de este programa ser una lnea por cada secuencia con la siguiente informacin:
La longitud de la subsecuencia ms larga, Dos puntos (:), Los nmeros que identific de la subsecuencia

Si existieran dos o ms subsecuencias (largas) con la misma longitud, deber escribir la ltima que aparezca en la entrada de datos. Suponga que tiene la siguiente secuencia de nmeros como entrada de datos: Ejemplo *Note que en el caso de la primera lnea solo se escribe el nmero 8 una sola vez.

Entrada
-7 10 12 9 2 3 8 8 9 7 -2 -1 12 300 1001 356 887 88 6 798 FIN

Salida
4 : 2 3 8 9 5 : -3 -1 12 300 1001

El domingo de Pascua es el primer domingo despus de la primera luna llena posterior al equinoccio de primavera y se determina mediante el siguiente clculo: a = ao % 19 b = ao % 4 c = ao % 7 d = (19 * a + 24) % 30 n = (22 + d + e)

05 Domingo de pascua

e = (2 * b + 4 * c + 6 * d + 5) % 7

Donde n indica el nmero del da del mes de marzo (si n es igual o menor que 31), en caso contrario el mes de abril se obtiene como (d + e - 9). Escriba un programa que escriba la fecha del domingo de Pascua a partir de un ao dado.

A la entrada se tendrn tres nmeros antecedidos por la palabra Year que indican tres aos de los que se desea conocer la fecha del primer domingo de Pascua. La salida es la fecha del primer domingo de Pascua de cada ao en el formato DD/MM/AAAA
Ejemplo

Entrada
Year 1990 Year 2012 Year 2050

Salida
15/04/1990 08/04/2012 10/04/2050

IV Concurso anual de programacin Escuela Superior de Computo IPN (30 de Mayo 2012)

En un estacionamiento se cobra de la siguiente manera: los primeros 10 minutos son gratis, del minuto 11 al 15 se cobran los primeros 15 minutos, los cuales cuestan $3, por cada fraccin siguiente de 15 minutos subsecuentes se cobran $4, si se llega a la primera hora se cobran $10, y cada hora subsecuente $5. A partir de la primera hora se cobran las horas completas. Si es Domingo (00:00 24:00 hrs.) se hace un descuento del 10% sobre el monto total de ese da. El estacionamiento acaba de implementar un sistema capaz de registrar la fecha y hora de entrada y salida de cada vehculo; por lo que se desea construir un programa que realice el resumen de cobro de un rango determinado de fechas. La entrada se compone de una secuencia de registros de la llegada y salida de vehculos formada por la fecha y hora de los mismos respectivamente. (*El formato de la hora es en 24 horas).

06 Cobrando el estacionamiento

rango determinado de registros termina con la palabra FIN, y est descrita en el siguiente orden: fecha de entrada, hora de entrada, carcter -, fecha de salida y hora de salida. Se utilizar el siguiente formato de fecha DD/MM/AAAA y el siguiente formato de hora HH:MM.

La entrada es una o ms secuencias de registros de entrada y de salida de los vehculos, la secuencia de un

La salida de este programa ser nicamente de una lnea, donde se muestra:


Ejemplo * Note que el 13/11/2011 es domingo

El monto total cobrado por el rango de entrada con el siguiente formato: $cantidad.2decimales.

Entrada
02/09/2011 13/11/2011 06/12/2011 09/12/2011 FIN 12:22 14:03 04:00 07:00 02/09/2011 13/11/2011 08/12/2011 09/12/2011 12:30 19:23 19:30 07:35

Salida
$363.00

Implemente un programa que invierta el orden de las letras que forman cada palabra en una serie de oraciones.

07 Scramble

La entrada es una serie de oraciones separadas por salto de lnea y al final la palabra FIN. La salida consiste en las mismas oraciones, escribiendo las palabras en orden inverso.
Ejemplo

Entrada
IV Concurso de Programacion. You love me. Escuela Superior de Computo. FIN

Salida
VI osrucnoC ed .noicamargorP uoY evol .em aleucsE roirepuS ed .otupmoC

08 El problema de la asignacin cuadrtica


La planeacin de las instalaciones en un campus universitario es un trabajo laborioso y complicado, parecido a la planeacin de una ciudad, pues tiene requerimientos similares, pero en menor escala.

IV Concurso anual de programacin Escuela Superior de Computo IPN (30 de Mayo 2012)

Entre las dificultades que con lleva este problema estn: planear las conexiones de agua y telefona; determinar la ubicacin de los edificios para que el traslado de las personas sea fluido; e incluso elegir el estilo arquitectnico. Respecto a la ubicacin de los edificios, se busca que las instalaciones entre las cuales haya mayor flujo de personas se encuentren ms cerca. Para ello se deben obtener las distancias entre los sitios, as como el costo de construccin. El problema que determina estas ubicaciones se denomina Problema de la Asignacin Cuadrtica (QAP por siglas en ingls). Suponemos que existen n sitios disponibles y n instalaciones por edificar. Sea dkl la distancia entre 2 sitios k y l donde se construirn las nuevas instalaciones. Adems, fij es el flujo de personas que se trasladaran entre las construcciones i y j. Cada asignacin puede ser escrita como una permutacin del conjunto N = {1, 2, , n}, tal que (i) = k significa que la instalacin i es asignada al sitio k. El producto dij * f(i) (j) describe la distancia caminada semanalmente entre las instalaciones i y j. Por lo tanto, el problema ser minimizar la distancia total recorrida semanalmente y se reduce a encontrar una que minimice la funcin de costo, dada por la ecuacin: Los elementos de entrada sern:
El nmero de edificios (n) Matriz de distancias (dist[i][j]) Matriz de flujos (flujo[ [ ] ][[]])

= [ ][] [[] ][[] ]


=0 =0

1 1

Donde [i] (i = 0, 1,, n-1) se refiere a la permutacin.

La salida depender del nmero de instalaciones x0, x2,, xn-1 y sern una permutacin de los nmeros entre 0 a n-1 y el costo menor encontrado; como se muestra en la siguiente tabla. Ejemplo * Existen varias permutaciones que cumplen con el costo mnimo, nicamente deber reportar una solucin con el valor de costo encontrado. Se le proporcionarn 2 casos de prueba, que evalen el desempeo de su programa, para n = 12 y n = 15, los datos de entrada para cada problema estarn separados por -1.

Entrada
5 0 5 2 4 1 5 0 3 0 2 2 3 0 0 0 1 2 0 1 2 4 0 0 0 5 2 1 1 0 1 1 2 0 5 0 3 2 2 1 0

Salida
2 3 4 0 1 50

0 1 1 0 1 2 2 1 3 2 -1