Skip to content

Instantly share code, notes, and snippets.

@nihilismus
Last active August 29, 2015 14:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nihilismus/4bc82449c5e383a6f246 to your computer and use it in GitHub Desktop.
Save nihilismus/4bc82449c5e383a6f246 to your computer and use it in GitHub Desktop.
(ns prueba.main)
(def alumnos
[{:nombre "A" :numero-de-control "12345" :calificaciones [80 70 80]}
{:nombre "B" :numero-de-control "23456" :calificaciones [90 70 0]}
{:nombre "C" :numero-de-control "34567" :calificaciones [100 70 70]}
{:nombre "D" :numero-de-control "45678" :calificaciones [100 100 90 90 70 70 80 80]}
{:nombre "E" :numero-de-control "56789" :calificaciones [100 70 70]}
{:nombre "F" :numero-de-control "67890" :calificaciones [100 90 100]}
{:nombre "G" :numero-de-control "78901" :calificaciones [100]}
])
(defn numeros-de-control-con-promedios
"Dada una secuencia de alumnos, regresa un mapa con sus numeros de control
como llaves y el promedio de sus calificaciones como valores asociados a
sus numeros de control"
[alumnos]
(let [numero-de-control-del (fn [alumno]
(get alumno :numero-de-control))
promedio-de-califiaciones-del (fn [alumno]
(let [numero-de-calificaciones (fn [xs]
(if (= (count xs) 0)
1
(count xs)))]
(/ (reduce + 0 (get alumno :calificaciones))
(* 1.0 (numero-de-calificaciones (get alumno :calificaciones))))))
mapa-numero-de-control-promedio (fn [mapa alumno]
(assoc mapa
(numero-de-control-del alumno)
(promedio-de-califiaciones-del alumno)))]
(reduce mapa-numero-de-control-promedio {} alumnos)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment