Reto 20: Reservar asientos contiguos para varios grupos
Objetivo #
Reservar asientos contiguos para varios grupos aplicando los contenidos de Python básico.
Conocimientos previos #
Listas, copias mediante recorridos, índices, bucles, condiciones, break y funciones.
Repasar los temas necesarios
Tu reto #
Implementa la función reservar_grupos(asientos, grupos).
asientos es una lista de booleanos: True significa libre y False, ocupado. Las posiciones se numeran desde 1. grupos contiene los tamaños de los grupos, todos enteros positivos.
Atiende cada grupo en orden. Busca desde el principio el primer bloque de asientos libres consecutivos que tenga tamaño suficiente. Si lo encuentras, reserva exactamente los asientos necesarios, cambiándolos a False en una copia de la sala. El grupo siguiente debe ver esas reservas.
Si un grupo no cabe entero en un bloque, registra [] para él y deja la sala como estaba para seguir con el siguiente. No juntes asientos separados por uno ocupado.
Devuelve una tupla (asignaciones, estado_final). Cada asignación es la lista de números de asiento de ese grupo. No modifiques ninguna entrada. Con cero grupos, las asignaciones están vacías y el estado final conserva todos los asientos.
La función debe devolver el resultado con return. No uses input() ni print(): el corrector llamará a tu función con diferentes datos.
Ejemplos #
| Llamada | Resultado devuelto |
|---|---|
reservar_grupos([True, True, False, True, True, True], [2, 3, 1]) | ([[1, 2], [4, 5, 6], []], [False, False, False, False, False, False]) |
reservar_grupos([True, False, True], [2, 1]) | ([[], [1]], [False, False, True]) |
Ver una pista
Haz una copia de los asientos. Para cada grupo, recorre esa copia contando libres consecutivos y reinicia el contador al encontrar uno ocupado. Cuando alcances el tamaño pedido, guarda y ocupa ese bloque.