Entrega: la agenda de turnos
Estás en modo lectura. Crea una cuenta o entra para enviar tu solución y ganar estrellas. Puedes ejecutar código igual.
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"), [])