Ejercitate / app.py
Kj97jdk's picture
Create app.py
fb9e5f2 verified
import gradio as gr
from datetime import datetime, timedelta
import re
def calcular_duracion(hora_inicio, hora_fin):
"""Calcula la duración en minutos entre dos horas."""
inicio = datetime.strptime(hora_inicio, "%H:%M")
fin = datetime.strptime(hora_fin, "%H:%M")
duracion = int((fin - inicio).total_seconds() / 60)
return duracion
def encontrar_mejor_hueco(horario, suenno):
"""Encuentra el hueco más largo en el día sin traslaparse con los horarios dados."""
# Validación del formato de los horarios ingresados
for bloque in horario.split(';'):
if not re.match(r'^\s*(\d{2}:\d{2})-(\d{2}:\d{2})\s*$', bloque.strip()):
return "Formato de horario inválido. Ejemplo: 09:00-10:00; 12:00-14:00"
if not re.match(r'^\s*(\d{2}:\d{2})-(\d{2}:\d{2})\s*$', suenno.strip()):
return "Formato de horario de sueño inválido. Ejemplo: 22:00-06:00"
# Añadir los horarios ocupados y de sueño al bloque de tiempo
bloques_tiempo = []
for bloque in (horario + ";" + suenno).split(';'):
hora_inicio, hora_fin = bloque.split('-')
bloques_tiempo.append((hora_inicio.strip(), hora_fin.strip()))
# Ordenar y añadir los extremos del día para facilitar el cálculo de huecos
bloques_tiempo.sort()
bloques_tiempo.insert(0, ("00:00", bloques_tiempo[0][0])) # Desde medianoche hasta el primer bloque
bloques_tiempo.append((bloques_tiempo[-1][1], "23:59")) # Desde el último bloque hasta el final del día
# Encontrar el hueco más largo sin superposición
max_duracion = 0
mejor_hueco = None
for i in range(len(bloques_tiempo) - 1):
inicio = bloques_tiempo[i][1]
fin = bloques_tiempo[i + 1][0]
duracion = calcular_duracion(inicio, fin)
if duracion > max_duracion:
max_duracion = duracion
mejor_hueco = f"{inicio}-{fin}"
# Evaluar si el mejor hueco se encuentra en los horarios recomendados científicamente
recomendacion = "No se encontró un hueco para hacer ejercicio en los horarios recomendados según la ciencia."
hora_inicio_ejercicio = datetime.strptime("05:00", "%H:%M")
hora_fin_ejercicio = datetime.strptime("09:00", "%H:%M")
hora_inicio_tarde = datetime.strptime("16:00", "%H:%M")
hora_fin_tarde = datetime.strptime("19:00", "%H:%M")
# Convertir el mejor hueco en datetime para comparación
if mejor_hueco:
inicio_hueco, fin_hueco = mejor_hueco.split('-')
inicio_hueco = datetime.strptime(inicio_hueco, "%H:%M")
fin_hueco = datetime.strptime(fin_hueco, "%H:%M")
if (hora_inicio_ejercicio <= inicio_hueco <= hora_fin_ejercicio) or (hora_inicio_tarde <= inicio_hueco <= hora_fin_tarde):
recomendacion = f"El mejor momento para hacer ejercicio según la ciencia es dentro de tu mejor hueco: {mejor_hueco}."
else:
recomendacion += f" Sin embargo, podrías ejercitar en el espacio {mejor_hueco}."
# Incluir redireccionamiento a ChatGPT
link_chatgpt = "https://chat.openai.com/?utm_source=gradio"
consulta_chatgpt = f"\n\nPara saber cuánto tiempo deberías ejercitar en este hueco según tus objetivos, consulta en ChatGPT: {link_chatgpt}"
return f"El mejor hueco es de {max_duracion} minutos: {mejor_hueco}. {recomendacion}{consulta_chatgpt}"
# Crear la interfaz de Gradio
demo = gr.Interface(
fn=encontrar_mejor_hueco,
inputs=[gr.Textbox(label="Horarios no disponibles (ej. 09:00-10:00; 12:00-14:00; incluyendo transporte, trabajo, etc.)"),
gr.Textbox(label="Horario de sueño (ej. 22:00-06:00)")],
outputs=gr.Textbox(label="Resultado"),
title="Encuentra tu mejor hueco para hacer ejercicio",
description="Ingresa tus horarios no disponibles, como los de sueño, transporte y trabajo, en formato 'HH:MM-HH:MM; HH:MM-HH:MM'. Las horas deben estar entre 00:00 y 23:59."
)
demo.launch()