Está en la página 1de 4

Examen de Informática

20 de enero de 2023

Primer ejercicio. (5 puntos)


En el juego del Master Mind, y en particular en el modo de juego en el que el computa-
dor trata de adivinar el código secreto pensado por el usuario, se desea implementar una
nueva estrategia para adivinar el código secreto. Esta estrategia introduce una modificación
en la función siquiente combinacion, y consiste en: Dadas una secuencia de tanteos y
respuestas:
[(C0 , R0 ) → (C1 , R1 ) → · · · → (Ci , Ri )]
la siguiente combinación Ci+1 es un tanteo elegido aleatoriamente de entre todos los tanteos
compatibles. Se dice que un tanteo C es compatible si cumple:

aciertos semiaciertos(Cj , C) = Rj , ∀j = 0, . . . , i

Se pide:

a) (4 puntos) Implementar una función llamada compatibles, tal que dada una secuencia
de tanteos y respuestas, devuelva una lista de todos los posibles códigos compatibles.
def c o m p a t i b l e s ( i n t e n t o s , r e s p u e s t a s ) :
””” ”
i n t e n t o s : e s una l i s t a de c ó d i g o s
r e s p u e s t a s : e s una l i s t a de pares , t u p l a s de dos e l e m e n t o s
( aciertos , semiaciertos )
D e v u e l v e La l i s t a de c ó d i g o s c o m p a t i b l e s
”””

Se puede usar la función aciertos semiaciertos implementada en la práctica 2, siempre


y cuando se incluyan aquı́ su descripción, sus parámetros de entrada y el valor devuelto.

Ejemplo de ejecución 1. Tanteos formados por dos dı́gitos (N=2):

>>> N = 2
>>> compatibles([31,80,23,14],[(1,0), (0,0), (0,0), (0,1)])
[51, 61, 71, 91]

1
Ejemplo de ejecución 2. Tanteos formados por cinco dı́gitos (N=5):

>>> N = 5
>>> compatibles([20122, 31203, 32014],[(0,3), (1,3), (1,4)])

[42301, 43210]

b) (1 punto) Escribe una función llamada siguiente combinacion tal que dada una se-
cuencia de tanteos y respuestas, devuelva la siguiente combinación siguiendo la estrate-
gia descrita anteriormente, es decir, que devuelva un tanteo elegido de forma aleatoria
de entre todos los compatibles. Si no hay tanteos compatibles, la función devuelve
False.

Ejemplo de ejecución. Tanteos formados por dos dı́gitos (N=2):

>>> N = 2
>>> siguiente_combinacion([31,80,23,14],[(1,0), (0,0), (0,0), (0,1)])
61 (uno cualquiera de la lista [51, 61, 71, 91])

2
Segundo ejercicio. G00gleMats (5 puntos) Vamos a implementar nuestro mapa ge-
ográfico en dos dimensiones. Este mapa lo vamos a representar como una lista de puntos,
donde cada punto es una tupla (x, y). Nuestro objetivo va a ser mostrar al usuario la
distancia recorrida al recorrer la lista completa o parte de ella.
• (0,5 puntos) Implementa una función points distance que recibe dos puntos como
parámetros y devuelve la distancia recorrida entre ellos.

• (1 punto) Implementa una función total distance que recorra todos los puntos de la
lista recibida como parámetro y devuelva la distancia recorrida entre ellos.

• (1.5 puntos) Implementa una función total distance 2 points que dados una lista
y dos puntos, calcule la distancia recorrida para recorrer todos los puntos de la lista
entre los dos puntos pasados por parámetro.
Finalmente, queremos también poder mostrar al usuario la distancia total de subida y la
distancia total de bajada recorrida durante el trayecto.
• (2 puntos) Implementa una función total levels que dada una lista de puntos, de-
vuelva una tupla con cuatro elementos (dist up, dist down, altitude up, altitude down),
donde dist up es la distancia recorrida subiendo, dist down es la distancia recorrida
bajando, altitude up es la altura acumulada ascendiendo y altitude down es la al-
tura acumulada descendiendo.
Ejemplo Supongamos que nuestro recorrido se muestra en la Figura :
Nuestras funciones deben realizar los siguientes cálculos. El resultado se muestra trun-
cado a un único decimal:

• points distance((0,0),(2,3)) devuelve 3.6

• points distance((2,3),(3,2)) devuelve 1.4

• points distance((3,2),(5,6)) devuelve 4.4

• points distance((5,6),(8,1)) devuelve 5.8

• total distance([(0,0),(2,3),(3,2),(5,6),(8,1)]) devuelve 15.2

• total distance 2 points( [(0,0),(2,3),(3,2),(5,6),(8,1)], (2,3), (5,6) )


devuelve 5.8. Fı́jate que los puntos dados pueden ser dos puntos cualesquiera. Por lo
tanto, la distancia anterior debe ser la misma distancia que la calculada intercambiando
los puntos, total distance 2 points( [(0,0),(2,3),(3,2),(5,6),(8,1)], (5,6),
(2,3) ) también debe devolver 5.8

3
y
6

0
0 1 2 3 4 5 6 7 8 x

Figure 1: G00gleMaths

• total levels( [(0,0),(2,3),(3,2),(5,6),(8,1)]) devuelve una tupla con 8.0, 7.2,


7, 6 como dist up, dist down, altitude up y altitude down, respectivamente.

También podría gustarte