Mayores y menores repeticiones

Dada una colección (lista, vectores y conjuntos) de colecciones (listas, vectores y conjuntos) se obtienen los elementos que cuenten con una mayor repetición así como los de menor repetición de manera absoluta: en la colección de colecciones.

Defina la función mayores-y-menores-repeticiones tal que dada una colección de colecciones regresa un mapa indicando los elementos con mayor y menor cantidad de repeticiones y su repeteción.

Ejemplos

Ejemplo 01

Dada la colección #{#{10 50 20 30} #{40 30 20 50 60} #{30 50 70} #{40 50} #{} #{30} #{50 30}}

  • Los elementos con mayores repeticiones: {30 5 50 5}
  • Los elementos con menores repeticiones: {20 2 40 2}

Ejemplo 02

Dada la colección [[\c \y \z] '(\y \g true \f \c) #{\y \z \@ \c} [10 \a 10 \b 10 \c] '(\c \a \s \a) #{\c \z}]

  • Los elementos con mayores repeticiones: {\c 6}
  • Los elementos con menores repeticiones: {\y 3 \z 3 10 \3}

Ejemplo 03

Dada la colección #{[1 10] [2 10] [3 10] [4 10] [5 10] [10 10 10]}

  • Los elementos con mayores repeticiones: {10 8}
  • Los elementos con menores repeticiones: {10 8}

Pruebas

;; Para el Ejemplo 01
=> (mayores-y-menores-repeticiones #{#{10 50 20 30} #{40 30 20 50 60} #{30 50 70} #{40 50} #{} #{30} #{50 30}})
{:mayores {30 5 50 5} :menores {20 2 40 2}

;; Para el Ejemplo 02
=> (mayores-y-menores-repeticiones [[\c \y \z] '(\y \g true \f \c) #{\y \z \@ \c} [10 \a 10 \b 10 \c] '(\c \a \s \a) #{\c \z}])
{:mayores {\c 6} :menores {\y 3 \z 3 10 \3}}

;; Para el Ejemplo 03
=> (mayores-y-menores-repeticiones #{#{[1 10] [2 10] [3 10] [4 10] [5 10] [10 10 10]}}}
{:mayores {10 8} :menores {10 8}}

Restricciones

  • No es posible hacer uso de la función frequencies de Clojure.

Nota

Solo las colecciones secuenciales de colecciones (listas, vectores y conjuntos) están consideradas como argumentos válidos. Los mapas y las cadenas de caracteres no.