Saltar a contenido

Parcialito 2 - 2023b - Tema 1#

Ejercicio 1#

Se desea extraer una lista de palabras de un archivo de texto para ser procesadas por las funciones definidas en los siguientes puntos.

  1. La función convert_list() convierte una lista de palabras en una lista de diccionarios, donde cada diccionario representa la información de una única palabra y posee las claves “word”, “freq” (frecuencia de aparición de esa palabra) y “len”. Observe a continuación la definición de dicha función y determine cuál es la complejidad temporal con la notación Big-O. Además, escriba el docstring de la función.

    def convert_list(list_of_words: list) -> list:
    list_dic = []
    d_aux = {}
    
    for w in list_of_words:
        if w in d_aux:
        d_aux[w] += 1
        else:
        d_aux[w] = 1
    
    for key, value in d_aux.items():
        list_dic.append({'word': key, 'freq': value, 'len': len(key)})
    
    return list_dic
    
  2. Implementar la función sort_list() que permita ordenar la lista de diccionarios del punto anterior según: I) largo; II) frecuencia de aparición.

  3. Dada una de las listas ordenadas que se puede obtener como resultado de aplicar alguno de los criterios del punto anterior, implementar la función search_freq() que para una dada frecuencia de aparición, retorne la primer palabra que encuentre en la lista de diccionarios que tenga la frecuencia especificada. Considere que el peor caso de la función debe resolverse en un tiempo mejor que O(n), donde n es la cantidad de elementos en la lista. Justifique la elección del algoritmo.

  4. Implementar un código principal que genere una lista de strings con todas las palabras (contemplando repeticiones) extraídas de un archivo de texto. Considere que cada palabra de la lista debe quedar en minúsculas. Luego utilice las funciones de los puntos anteriores para encontrar e imprimir en pantalla la palabra hallada con una frecuencia de aparición definida por el usuario desde la terminal.

Ejercicio 2#

Uno de los estándares para el tamaño de papel está especificado por la norma ISO 216. Los distintos tamaños de papel están relacionados de modo tal que es posible obtener las dimensiones de cualquiera de ellos a partir de las dimensiones de uno solo. Suponer que se toma como referencia el tamaño de mayor medida, A0, cuyas dimensiones son 841 mm x 1189 mm. En el siguiente esquema se muestra la relación de proporciones entre los diferentes tamaños, donde se puede apreciar que cada tamaño se obtiene dividiendo a la mitad el tamaño de papel de una dimensión mayor:

Tamaños hojas

  1. Implemente una función get_size_A(n) que reciba un entero n asociado al tamaño (ejemplo A4: n = 4) y retorne una tupla de enteros con las dimensiones (ancho, largo), que siemre cumple ancho < largo. La función debe resolver el problema de forma RECURSIVA (no iterativa).

  2. Implemente un programa principal que utilice la función del ejercicio anterior para generar una lista de todas las dimensiones entre A0 y A5, y la guarde en un archivo de texto “dimensiones.txt”. El formato que debe guardarse en el archivo es el siguiente:

    PAPEL   ANCHO   ALTO
    A0      841     1189
    A1      594     841
    A2      420     594
    A3      297     420
    A4      210     297
    A5      148     210