Spaces:
Sleeping
Sleeping
Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
from datetime import datetime, timedelta
|
3 |
+
import re
|
4 |
+
|
5 |
+
def calcular_duracion(hora_inicio, hora_fin):
|
6 |
+
"""Calcula la duración en minutos entre dos horas."""
|
7 |
+
inicio = datetime.strptime(hora_inicio, "%H:%M")
|
8 |
+
fin = datetime.strptime(hora_fin, "%H:%M")
|
9 |
+
duracion = int((fin - inicio).total_seconds() / 60)
|
10 |
+
return duracion
|
11 |
+
|
12 |
+
def encontrar_mejor_hueco(horario, suenno):
|
13 |
+
"""Encuentra el hueco más largo en el día sin traslaparse con los horarios dados."""
|
14 |
+
|
15 |
+
# Validación del formato de los horarios ingresados
|
16 |
+
for bloque in horario.split(';'):
|
17 |
+
if not re.match(r'^\s*(\d{2}:\d{2})-(\d{2}:\d{2})\s*$', bloque.strip()):
|
18 |
+
return "Formato de horario inválido. Ejemplo: 09:00-10:00; 12:00-14:00"
|
19 |
+
if not re.match(r'^\s*(\d{2}:\d{2})-(\d{2}:\d{2})\s*$', suenno.strip()):
|
20 |
+
return "Formato de horario de sueño inválido. Ejemplo: 22:00-06:00"
|
21 |
+
|
22 |
+
# Añadir los horarios ocupados y de sueño al bloque de tiempo
|
23 |
+
bloques_tiempo = []
|
24 |
+
for bloque in (horario + ";" + suenno).split(';'):
|
25 |
+
hora_inicio, hora_fin = bloque.split('-')
|
26 |
+
bloques_tiempo.append((hora_inicio.strip(), hora_fin.strip()))
|
27 |
+
|
28 |
+
# Ordenar y añadir los extremos del día para facilitar el cálculo de huecos
|
29 |
+
bloques_tiempo.sort()
|
30 |
+
bloques_tiempo.insert(0, ("00:00", bloques_tiempo[0][0])) # Desde medianoche hasta el primer bloque
|
31 |
+
bloques_tiempo.append((bloques_tiempo[-1][1], "23:59")) # Desde el último bloque hasta el final del día
|
32 |
+
|
33 |
+
# Encontrar el hueco más largo sin superposición
|
34 |
+
max_duracion = 0
|
35 |
+
mejor_hueco = None
|
36 |
+
for i in range(len(bloques_tiempo) - 1):
|
37 |
+
inicio = bloques_tiempo[i][1]
|
38 |
+
fin = bloques_tiempo[i + 1][0]
|
39 |
+
duracion = calcular_duracion(inicio, fin)
|
40 |
+
if duracion > max_duracion:
|
41 |
+
max_duracion = duracion
|
42 |
+
mejor_hueco = f"{inicio}-{fin}"
|
43 |
+
|
44 |
+
# Evaluar si el mejor hueco se encuentra en los horarios recomendados científicamente
|
45 |
+
recomendacion = "No se encontró un hueco para hacer ejercicio en los horarios recomendados según la ciencia."
|
46 |
+
hora_inicio_ejercicio = datetime.strptime("05:00", "%H:%M")
|
47 |
+
hora_fin_ejercicio = datetime.strptime("09:00", "%H:%M")
|
48 |
+
hora_inicio_tarde = datetime.strptime("16:00", "%H:%M")
|
49 |
+
hora_fin_tarde = datetime.strptime("19:00", "%H:%M")
|
50 |
+
|
51 |
+
# Convertir el mejor hueco en datetime para comparación
|
52 |
+
if mejor_hueco:
|
53 |
+
inicio_hueco, fin_hueco = mejor_hueco.split('-')
|
54 |
+
inicio_hueco = datetime.strptime(inicio_hueco, "%H:%M")
|
55 |
+
fin_hueco = datetime.strptime(fin_hueco, "%H:%M")
|
56 |
+
|
57 |
+
if (hora_inicio_ejercicio <= inicio_hueco <= hora_fin_ejercicio) or (hora_inicio_tarde <= inicio_hueco <= hora_fin_tarde):
|
58 |
+
recomendacion = f"El mejor momento para hacer ejercicio según la ciencia es dentro de tu mejor hueco: {mejor_hueco}."
|
59 |
+
else:
|
60 |
+
recomendacion += f" Sin embargo, podrías ejercitar en el espacio {mejor_hueco}."
|
61 |
+
|
62 |
+
# Incluir redireccionamiento a ChatGPT
|
63 |
+
link_chatgpt = "https://chat.openai.com/?utm_source=gradio"
|
64 |
+
consulta_chatgpt = f"\n\nPara saber cuánto tiempo deberías ejercitar en este hueco según tus objetivos, consulta en ChatGPT: {link_chatgpt}"
|
65 |
+
|
66 |
+
return f"El mejor hueco es de {max_duracion} minutos: {mejor_hueco}. {recomendacion}{consulta_chatgpt}"
|
67 |
+
|
68 |
+
# Crear la interfaz de Gradio
|
69 |
+
demo = gr.Interface(
|
70 |
+
fn=encontrar_mejor_hueco,
|
71 |
+
inputs=[gr.Textbox(label="Horarios no disponibles (ej. 09:00-10:00; 12:00-14:00; incluyendo transporte, trabajo, etc.)"),
|
72 |
+
gr.Textbox(label="Horario de sueño (ej. 22:00-06:00)")],
|
73 |
+
outputs=gr.Textbox(label="Resultado"),
|
74 |
+
title="Encuentra tu mejor hueco para hacer ejercicio",
|
75 |
+
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."
|
76 |
+
)
|
77 |
+
|
78 |
+
demo.launch()
|