Saltar a contenido

Parcialito 1 - 2024b - Tema 1#

Ejercicio 1#

Se quiere implementar un software para administrar reservas de habitaciones de un hotel. Se propone guardar la información en un diccionario que contenga, como claves los tipos de habitaciones (“simple”, “doble” y “suite”) y como valores otros diccionarios con la información de las reservas, por ejemplo:

dic_reservas = {
    "simple": {"disponibles": 6, "reservas": ["María"]},
    "doble": {"disponibles": 2, "reservas": ["Carlos", "Karen"]},
    "suite": {"disponibles": 1, "reservas": ["Ana"]}
}

Implemente un programa que solicite los datos de una nueva reserva, pidiendo el nombre del cliente y tipo de habitación deseada. El programa debe verificar que queden suficientes habitaciones del tipo solicitado. Si hay habitaciones disponibles, debe agregar el nombre del cliente a la lista de reservas y actualizar la cantidad de habitaciones disponibles para ese tipo. Si se pudo realizar la reserva, se debe indicar el mensaje “Reserva confirmada”. En caso de estar agotada la habitación solicitada, debe informar mediante un mensaje que no se puede hacer la reserva. Finalmente el programa debe mostrar en pantalla un resumen con el estado actual de todas las habitaciones y reservas. Nota: tenga en cuenta buenas prácticas de modularización. Una posible ejecución sería:

Ingrese nombre del cliente: Joaquín
Ingrese habitación (simple/doble/suite): simple
Reserva confirmada

Habitaciones simples: 5 disponibles, reservadas por ['María', 'Joaquín']
Habitaciones dobles: 2 disponibles, reservadas por ['Carlos', 'Karen']
Habitaciones suite: 1 disponibles, reservadas por ['Ana']

Ejercicio 2#

Se requiere implementar un programa que permita comparar dos cadenas de texto, para determinar la cantidad de palabras en común y cuántas veces hay coincidencia.

a. Escriba una función limpiar_cadena() que reciba un string y retorne una lista de strings que correspondan a cada palabra de la cadena, todas en mayúscula y sin incluir ningún signo de puntuación. Ayuda: suponga que dispone la siguiente cadena con todos los caracteres de puntuación que deben quitarse: sg = """!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~""".

Por ejemplo:

"Hola, esto es el campus (virtual)?"              # Si este es el string ingresado
["HOLA", "ESTO", "ES", "EL", "CAMPUS", "VIRTUAL"] # Debería retornar esta lista

b. Implemente la función comparar_str(L1, L2) que reciba dos listas de strings de largo arbitrario y retorne un diccionario, donde las claves sean las palabras en común en ambas listas y el valor la cantidad coincidencias entre las dos (siempre de a pares, por ejemplo, si “HOLA” aparece 2 veces en L1 y 10 veces en L2, se considera 2 coincidencias). Si no hay coincidencias para una determinada palabra, no debe incluirse esa palabra en el diccionario. Ejemplo:

L1 = ["ESTA", "CADENA", "ES", "LA", "CADENA"]
L2 = ["LA", "CADENA", "ES", "LA", "OTRA", "CADENA"]

Estructura retornada:

{"CADENA": 2, "ES": 1, "LA": 1}

c. Implemente el programa principal de modo que le solicite al usuario el ingreso de dos cadenas. Luego imprima por la pantalla un resumen mostrando un listado de todas las palabras que coinciden en ambos textos y la cantidad de coincidencias encontradas en cada caso. Ejemplo:

Ingrese cadena 1: Esta cadena es LA cadena!!
Ingrese cadena 2: ¿La cadena, es la otra cadena?

Resultado del análisis:
CADENA: 2
ES: 1
LA: 1

Ejercicio 3#

La técnica DSSS (Direct Sequence Spread Spectrum) es ampliamente utilizada para modulación en sistemas de comunicaciones como WiFi, GPS, etc. Si queremos transmitir una secuencia de bits de datos modulados con DSSS, acá representados como una cadena, por ejemplo bits = "0100", necesitamos primero extender esta secuencia de modo tal que repitamos cada bit n veces, por ejemplo si n=3 quedaría la secuencia bits2 = "000111000000". Luego, necesitamos obtener otra secuencia de bits pero generados de forma “pseudo-aleatoria”, por ejemplo chips = "001001101011" de mismo largo que bits2. Finalmente, la secuencia final modulada será el resultado de aplicar el operador lógico XOR (Tabla 1) bit a bit entre ambas secuencias, es decir dsss = bits2 XOR chips.

a. Implemente una función llamada xor() que reciba solo dos bits (a y b) y retorne el bit correspondiente a la operación XOR (de acuerdo a la tabla). No olvide especificar los Type Hints.

b. Implemente una función modulate_dsss() que reciba una cadena con la secuencia de bits a transmitir (de largo arbitrario) y retorne la secuencia modulada con DSSS. Nota: Asuma que dispone de una función get_chips(n: int)->str (no debe implementar esta función, solo usarla) que genera una cadena de bits (chips) pseudo-aleatorios.

a b a XOR b
0 0 0
0 1 1
1 0 1
1 1 0