¿Te has preguntado alguna vez cómo un simple script puede salvar a un profesor de Cálculo de un aula vacía? ⏰ Descubre cómo la puntualidad, o la falta de ella, puede automatizarse con Python.
🔮 Enunciado del Problema
Un profesor de Cálculo Integral, frustrado por la impuntualidad crónica, ha decidido automatizar la cancelación de la clase. La clase se cancelará si no se cumple con un número mínimo de alumnos presentes a tiempo. Tu misión es escribir una función que determine si la clase se cancela basándose en los tiempos de llegada de los alumnos.
Parámetros:
min_students
: (int) El número mínimo de estudiantes requeridos para que la clase no se cancele.arrivals
: (int array) Un arreglo de enteros que representa los tiempos de llegada de cada alumno. Los valores negativos indican que el alumno llegó temprano (minutos antes de la clase), los valores positivos indican que el alumno llegó tarde (minutos después de la clase), y el valor 0 indica que el alumno llegó justo a tiempo.
Valor de retorno:
- (string): Retornar ‘SI’ si la clase se cancela y ‘NO’ si la clase se realiza.
Ejemplo:
>>> cancelled_class(3, [-1, 0, 2, 3, 4])
'SI'
>>> cancelled_class(2, [-2, 0, 1, 2])
'NO'
Nota: Un alumno se considera puntual si su tiempo de llegada es menor o igual a 0.
🧩 Resolución Paso a Paso
Vamos a desglosar este problema en partes manejables. Primero, necesitamos identificar a los alumnos que llegaron a tiempo.
Filtrado de Alumnos Puntuales:
Para ello, utilizamos la función filter
junto con una función anónima lambda
. La función lambda
actúa como un filtro, seleccionando solo aquellos tiempos de llegada que son menores o iguales a 0, es decir, los alumnos puntuales o tempraneros. Convertimos el resultado de filter
en una lista para facilitar su manipulación.
puntuals = list(filter(lambda x: x <= 0, arrivals))
Determinación de la Cancelación:
Una vez que tenemos la lista de alumnos puntuales, simplemente comparamos su longitud con el número mínimo requerido de estudiantes (min_students
). Si el número de alumnos puntuales es menor que min_students
, la clase se cancela.
return 'NO' if len(puntuals) >= min_students else 'SI'
Solución Completa:
def cancelled_class(min_students, arrivals):
"level: easy; points: 3"
puntuals = list(filter(lambda x: x <= 0, arrivals))
return 'NO' if len(puntuals) >= min_students else 'SI'
🧠 Conceptos Clave
Este ejercicio ilustra varios conceptos fundamentales en la programación funcional de Python. 🪄
Las funciones de orden superior, como filter
, toman otras funciones como argumentos. Esto permite crear código más flexible y reutilizable. En este caso, filter
aplica la función lambda
a cada elemento de la lista arrivals
, devolviendo un iterador con los resultados.
Las funciones lambda
son funciones anónimas, es decir, funciones que no están ligadas a un identificador específico. Son útiles para operaciones sencillas y concisas, especialmente cuando se utilizan con funciones de orden superior. Su sintaxis lambda argumentos: expresión
permite definir una función en una sola línea.
La función filter
es una herramienta poderosa para la selección de elementos en una secuencia basándose en una condición. A diferencia de las list comprehensions, filter
devuelve un iterador, lo que puede ser más eficiente en términos de memoria para secuencias muy grandes.
Las expresiones condicionales (también conocidas como operadores ternarios) permiten escribir código condicional en una sola línea, haciendo el código más conciso y legible. En este caso, la expresión condicional devuelve ‘NO’ si la clase no se cancela, y ‘SI’ si se cancela.
¿Sabías que…? La eficiencia de filter
puede variar dependiendo de la longitud de la lista arrivals
y la complejidad de la función lambda
. En algunos casos, una list comprehension podría ser más eficiente, especialmente si la función lambda
es muy compleja.
💫 Reflexiones Finales
Esta solución, aunque sencilla, destaca la capacidad de Python para abordar problemas con elegancia y eficiencia. Una posible mejora sería incluir manejo de errores, como validar que min_students
sea un entero positivo y que arrivals
sea realmente una lista. Además, se podría extender la funcionalidad para enviar notificaciones automáticas a los alumnos en caso de cancelación.
Esta tarea nos recuerda que la programación no solo se trata de resolver problemas, sino también de optimizar procesos y hacer la vida más fácil (¡para los profesores de Cálculo, al menos!). 👨🏫
¿Te ha gustado este viaje a través de la puntualidad programada? Si quieres explorar más soluciones creativas y desentrañar los misterios del código, ¡no dudes en explorar otros artículos en nuestro blog! ¡Nos vemos en el próximo byte! 🚀