import random
# Semilla para que la simulación sea reproducible
random.seed(123)
# Configuración de horarios
horarios = [
{
"inicio": 7 * 60,
"fin": 13 * 60,
"llegada": (8, 15),
"servicio": (2, 3)
},
{
"inicio": 13 * 60,
"fin": 19 * 60,
"llegada": (1, 5),
"servicio": (3, 4)
},
{
"inicio": 19 * 60,
"fin": 25 * 60, # 01:00 del siguiente día
"llegada": (4, 7),
"servicio": (4, 5)
},
{
"inicio": 25 * 60,
"fin": 31 * 60, # 07:00 del siguiente día
"llegada": (30, 40),
"servicio": (2, 3)
}
]
# Función para determinar el intervalo correspondiente
def obtener_intervalo(minuto):
for h in horarios:
if h["inicio"] <= minuto < h["fin"]:
return h
return None
# Inicio de simulación (07:00)
tiempo = 7 * 60
fin_simulacion = 31 * 60
clientes = []
# Generar llegadas
while tiempo < fin_simulacion:
intervalo = obtener_intervalo(tiempo)
if intervalo is None:
break
llegada = random.randint(intervalo["llegada"][0], intervalo["llegada"][1])
tiempo += llegada
if tiempo >= fin_simulacion:
break
intervalo = obtener_intervalo(tiempo)
servicio = random.randint(intervalo["servicio"][0], intervalo["servicio"][1])
clientes.append({
"llegada": tiempo,
"servicio": servicio
})
# Simulación de la cola
fin_servicio_anterior = 7 * 60
espera_total = 0
print("{:<8} {:<10} {:<10} {:<10}".format(
"Cliente", "Llegada", "Servicio", "Espera"))
for i, cliente in enumerate(clientes, start=1):
inicio_servicio = max(cliente["llegada"], fin_servicio_anterior)
espera = inicio_servicio - cliente["llegada"]
fin_servicio_anterior = inicio_servicio + cliente["servicio"]
espera_total += espera
hora = cliente["llegada"] // 60
minuto = cliente["llegada"] % 60
print("{:<8} {:02d}:{:02d} {:<10} {:<10}".format(
i,
hora % 24,
minuto,
cliente["servicio"],
espera
))
print("\nRESULTADOS")
print("-" * 30)
print("Clientes atendidos:", len(clientes))
print("Tiempo total de espera:", espera_total, "min")
print("Tiempo promedio de espera: {:.2f} min".format(
espera_total / len(clientes)))
To embed this project on your website, copy the following code and paste it into your website's HTML: