Parcialito 2 - 2023a - Tema 3#
Todas las funciones desarrolladas deben tener su respectivo typehint y deben seguir buenas prácticas de programación.
Ejercicio 1#
Se tiene una lista que contiene diccionarios de un catálogo de estrellas con las claves “codigo” para el nombre, y “magnitud” y “unidad” que denotan la distancia a la tierra en años luz (ly) o miles de años luz (kly). Un ejemplo (solamente un ejemplo) de listas de este tipo es el siguiente:
[{"codigo": "alfa", "magnitud": 3, "unidad": "ly"},
{"codigo": "beta", "magnitud": 1, "unidad": "kly"},
{"codigo": "gamma", "magnitud": 3, "unidad": "kly"},
{"codigo": "delta", "magnitud": 1, "unidad": "ly"},
{"codigo": "epsilon", "magnitud": 1, "unidad": "ly"},
{"codigo": "dseta", "magnitud": 2, "unidad": "ly"},
{"codigo": "eta", "magnitud": 2, "unidad": "kly"},
{"codigo": "theta", "magnitud": 3, "unidad": "kly"},
{"codigo": "iota", "magnitud": 1, "unidad": "ly"},
{"codigo": "kappa", "magnitud": 2, "unidad": "ly"},
{"codigo": "lambda", "magnitud": 2, "unidad": "ly"}]
Implementar una función que tome una lista con este formato y la ordene por codigo
utilizando merge sort
.
Ejercicio 2#
Dada una de las lista obtenida como resultado de aplicar la función desarrollada en el punto anterior, implementar otra función que dado un código nos indique a qué distancia (magnitud y unidades) se encuentra la estrella.
La función debe resolver el probleman en un tiempo mejor que \(\mathcal{O}(n)\), donde \(n\) es la cantidad de elementos en la lista.
Ejercicio 3#
Dado un diccionario que contiene un arbol genealógico con este formato:
family_tree = {
"a": (),
"b": (),
"c": ("a", "b"),
"d": ("a", "b"),
"e": ("a", "b"),
"f": ("m", "n"),
"g": ("f", "c"),
"h": ("f", "c"),
"i": ("d",),
"j": ("d",),
"k": (),
"l": ("j", "k"),
"m": (),
"n": (),
}
donde la tupla asociada a cada clave contiene su ascendencia directa, escribir una función recursiva que, dados dos apellidos como argumentos de entrada, indique si el primero es ancestro del segundo.
En el caso del ejemplo, podemos ver que "a"
es ancestro de "d"
, pero también de "i"
(a través de "d"
) y de "l"
(a través de "j"
, y luego de "d"
), entre otros.
Además, "a"
, "b"
, "k"
y otros similares no tienen ancestros.