Kj97jdk commited on
Commit
fb9e5f2
·
verified ·
1 Parent(s): f808443

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +78 -0
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()