Mayo 18 de 2013 Consideraciones Generales Esta evaluación es estrictamente individual. Cualquier violación a esta norma será considerada como fraude. Tiene 2 horas para realizar el examen. Sólo puede sacar lapicero, lápiz y borrador. No se puede sacar: celulares (Blackberry, iphone, etc), computadores y/o cualquier dispositivo electrónico. Cualquier violación a esta norma será considerada como fraude. No se permite el préstamo de ningún objeto (lápices, borradores, etc.), ni hablar con sus compañeros o mirar el examen de ellos. El fraude ocasiona la apertura de un proceso disciplinario. Debe hacer contrato por cada función que implemente. El contrato vale el 20 % de la calificación de cada pregunta. Bomberman es un juego creado en los años 80 para las consolas de videojuegos de esa época. El juego consiste en un personaje, Bomberman, que utiliza bombas para abrirse camino por un laberinto. Cada vez que pone una bomba, las 4 casillas adyacentes (vertical y horizontalmente, no las diagonales) son afectadas por la explosión. Es decir, cuando Bomberman pone una bomba se destruyen las paredes adyacentes a ésta. Un ejemplo de un estado del juego se muestra a continuación. En el primer estado de este juego, Bomberman ha puesto la bomba junto a una pared de ladrillo. En el siguiente estado esa pared de ladrillo ya no está, es destruida. Este juego se puede modelar por medio de una matriz, en donde las paredes de ladrillo se representen por una m, los muros de hormigón (indestructibles) se representen por una h, los espacios vacíos con el número 0 y Bomberman con el número 1. Por ejemplo, un estado del juego puede ser: [[h, h, h, h, h, h], [h, 0, 0, 0, 0, 0], [h, 0, h, 0, h, 0], [h, 0, 0, m, m, 0], [h, 1, h, 0, h, 0]] Página 1 de 6
1. 5 Puntos Implemente una función en Python que retorne una lista de dos elementos correspondientes a la posición en x y y de Bomberman en la matriz. Note que Bomberman puede estar en cualquier posición de la matriz. 2. 10 Puntos Implemente una función en Python que reciba una matriz del juego y una posición (i, j) en la matriz. La función debe retornar la matriz modificada con el efecto de poner una bomba en dicha posición. Recuerde que no es válido poner bombas sobre paredes ni muros de hormigón. Página 2 de 6
3. 10 Puntos Suponiendo que existe solo un único camino libre (de ceros) desde Bomberman hasta una salida representada por una s, implemente una función en Python que dada la matriz, retorne una lista con el camino a seguir por Bomberman desde su posición inicial hasta la salida s. Página 3 de 6
Suponga que en estos momentos estamos a 25 de Noviembre de 2013 y el Campeonato de la Fórmula 1 recién ha culminado en Brasil el día de ayer. En nuestras manos tenemos la información presentada a nosotros por la Federación Internacional del Automóvil (FIA) en donde se nos dan a conocer los resultados finales de cada uno de los Grandes Premios (carreras) disputados durante el campeonato. Asimismo, se nos brinda la información de cada piloto participante en la gran carpa del automovilismo. Dichos datos se nos entregan organizados de la siguiente manera: Pilotos = [[1,"Vettel","Sebastian","Red Bull","Alemania"] [2,"Webber","Mark","Red Bull","Australia"] [3,"Alonso","Fernando","Ferrari","Espana"] [4,"Massa","Felipe","Ferrari","Brasil"] [5,"Button","Jenson","McLaren","Inglaterra"] [6,"Perez","Sergio","McLaren","Mexico"] [7,"Raikkonen","Kimi","Lotus","Finlandia"] [8,"Grosjean","Romain","Lotus","Francia"] [9,"Rosberg","Nico","Mercedes","Alemania"] [10,"Hamilton","Lewis","Mercedes","Inglaterra"] [11,"Hulkenberg","Nico","Sauber","Alemania"] [12,"Gutierrez","Esteban","Sauber","Mexico"] [14,"di Resta","Paul","Force India","Escocia"] [15,"Sutil","Adrian","Force India","Alemania"] [16,"Maldonado","Pastor","Williams","Venezuela"] [17,"Valtteri","Bottas","Williams","Finlandia"] [18,"Vergne","Jean-Eric","Toro Rosso","Francia"] [19,"Ricciardo","Daniel","Toro Rosso","Australia"] [20,"Pic","Charles","Caterham","Francia"] [21,"Van der Garde","Giedo","Caterham","Holanda"] [22,"Bianchi","Jules","Marussia","Francia"] [23,"Chilton","Max","Marussia","Inglaterra"]] Carreras = [["Australia",[7,3,1,4,10,2,15,14,5,8,6,18,12,17,22,20,23,21,19,9,16,11]], ["Malasia",[1,2,10,9,4,8,7,11,6,18,17,12,22,20,21,23,5,19,16,15,14,3]], ["China",[3,7,10,1,5,4,19,14,8,11,6,18,17,16,22,20,23,21,9,2,15,12]], ["Bahrein",[1,7,8,14,10,6,2,3,9,5,16,11,15,17,4,19,20,12,22,23,21,18]], ["Espana",[3,7,6,2,1,9,20,10,11,19,22,16,8,14,21,23,12,17,18,4,5,15]], ["Monaco",[7,5,2,16,15,17,9,10,18,19,3,20,6,14,4,1,21,12,22,8,23,11]], ["Canada",[3,10,2,14,9,6,7,8,1,12,5,4,11,20,22,18,15,23,16,17,19,21]], ["Gran Bretana",[5,10,2,9,16,23,6,19,4,7,8,14,21,20,3,15,11,22,12,17,18,1]], ["Alemania",[1,7,11,9,2,8,4,6,18,2,5,19,10,3,14,20,23,12,17,21,15,16]], ["Hungria",[7,2,4,5,6,19,3,1,15,11,9,10,22,12,14,17,21,23,16,8,18,20]], ["Belgica",[3,2,4,7,17,20,23,1,22,8,5,15,9,6,10,21,11,19,18,14,12,16]], ["Italia",[7,15,2,3,1,4,12,20,17,8,10,5,23,22,21,14,18,6,16,9,11,19]], ["Singapur",[5,9,8,4,3,20,10,2,18,1,7,16,22,21,23,15,19,14,6,11,17,12]], ["Corea del Sur",[1,7,5,4,3,21,10,5,8,6,2,18,22,15,19,16,17,9,20,12,23,14]], ["Japon",[5,3,7,10,8,6,15,1,16,21,19,2,23,17,9,18,12,22,20,11,4,14]], ["India",[3,1,7,8,22,2,6,4,21,5,11,19,9,15,23,12,16,20,17,10,14,18]], ["Abu Dhabi",[16,8,3,10,7,9,6,19,2,22,5,11,14,17,1,23,12,4,15,18,21,20]], ["Estados Unidos",[1,10,7,17,4,22,19,6,5,2,3,16,11,9,12,15,21,20,23,8,14,18]], ["Brasil",[3,4,6,2,12,18,10,16,7,1,5,21,9,22,23,17,15,11,20,14,19,8]] Página 4 de 6
La información suministrada por la FIA son dos matrices, una de pilotos y otra de carreras. La matriz de pilotos tiene tantas filas como pilotos hayan corrido y cada columna representa un dato del piloto: su número, su apellido, su nombre, su equipo y su nacionalidad. Por otro lado, la matriz de carreras posee 19 filas, es decir, el número de carreras en el campeonato, y dos columnas, en donde la primera es el lugar donde se corre el Gran Premio y la segunda una lista con los resultados de la carrera. Es importante saber que el orden de los números de los pilotos en la lista suministrada en la segunda columna, muestra la posición de cada uno de ellos al final de dicha carrera. La FIA ha establecido una nueva puntuación para cada piloto durante las carreras, de la siguiente manera: solamente los 4 primeros pilotos puntúan y los valores que se le dan a cada posición es la siguiente: 1 25 puntos, 2 18 puntos, 3 11 puntos, 4 3 puntos. 4. 15 Puntos Realice un procedimiento en Python que imprima cada piloto y su respectiva cantidad de puntos en pantalla (deben aparecer 32 líneas conteniendo los siguientes datos: número del piloto, nombre, apellido, escudería, país y cantidad de puntos obtenidos). No es necesario ordenar los pilotos teniendo en cuenta su puntaje final, tan sólo se pide que se muestren los datos de cada piloto más los puntos obtenidos durante el campeonato. Página 5 de 6
5. 15 Puntos Realice un procedimiento en Python que imprima: 1. El piloto campeón de Fórmula 1(su nombre, apellido, escudería, país de origen y puntos acumulados). 2. La escudería triunfadora (su nombre y el puntaje total). Página 6 de 6