Try Synsema
Entrar Crear cuenta

Entrega: la agenda de turnos

+60 xp ◆ 3

Estás en modo lectura. Crea una cuenta o entra para enviar tu solución y ganar estrellas. Puedes ejecutar código igual.

Tu programa
Así te va a probar Tomás (pruebas de la misión)
test "validar_turno detecta cada problema en orden"
    assert_eq(validar_turno({"paciente": "Rosa Díaz", "fecha": "2026-03-10", "inicio": "09:00", "fin": "09:30"}), "ok")
    assert_eq(validar_turno({"fecha": "2026-03-10", "inicio": "09:00", "fin": "09:30"}), "falta el paciente")
    assert_eq(validar_turno({"paciente": "  ", "fecha": "2026-03-10", "inicio": "09:00", "fin": "09:30"}), "falta el paciente")
    assert_eq(validar_turno({"paciente": "Luis Paz", "fecha": "2026-03-10", "inicio": "9am", "fin": "09:30"}), "horario inválido")
    assert_eq(validar_turno({"paciente": "Luis Paz", "fecha": "2026-03-10", "inicio": "10:00", "fin": "09:30"}), "el turno termina antes de empezar")

test "se_solapan solo en la misma fecha y con rangos pisados"
    let a be {"paciente": "A", "fecha": "2026-03-10", "inicio": "09:00", "fin": "10:00"}
    assert_eq(se_solapan(a, {"paciente": "B", "fecha": "2026-03-10", "inicio": "09:30", "fin": "10:30"}), true)
    assert_eq(se_solapan(a, {"paciente": "B", "fecha": "2026-03-10", "inicio": "10:00", "fin": "10:30"}), false)
    assert_eq(se_solapan(a, {"paciente": "B", "fecha": "2026-03-11", "inicio": "09:30", "fin": "10:30"}), false)
    assert_eq(se_solapan(a, {"paciente": "B", "fecha": "2026-03-10", "inicio": "08:00", "fin": "09:00"}), false)

test "agendar agrega, valida y rechaza choques"
    let t1 be {"paciente": "Rosa Díaz", "fecha": "2026-03-10", "inicio": "09:00", "fin": "09:30"}
    let t2 be {"paciente": "Luis Paz", "fecha": "2026-03-10", "inicio": "09:15", "fin": "09:45"}
    let ag be agendar([], t1)
    assert_eq(length(ag), 1)
    assert_error(() => agendar(ag, t2))
    assert_error(() => agendar(ag, {"fecha": "2026-03-10", "inicio": "11:00", "fin": "11:30"}))
    let ag2 be agendar(ag, {"paciente": "Luis Paz", "fecha": "2026-03-10", "inicio": "09:30", "fin": "10:00"})
    assert_eq(length(ag2), 2)

test "dia_ordenado lista el día por hora de inicio"
    let ag be [
        {"paciente": "Luis Paz", "fecha": "2026-03-10", "inicio": "11:00", "fin": "11:30"},
        {"paciente": "Rosa Díaz", "fecha": "2026-03-10", "inicio": "09:00", "fin": "09:30"},
        {"paciente": "María García", "fecha": "2026-03-11", "inicio": "08:00", "fin": "08:30"}
    ]
    assert_eq(dia_ordenado(ag, "2026-03-10"), ["09:00 Rosa Díaz", "11:00 Luis Paz"])
    assert_eq(dia_ordenado(ag, "2026-03-12"), [])