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)))

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: