Estudiantes:
16-10782 Franco Murillo
18-10451 Carlo Herrera
19-10105 Daniela Avendaño
data Frecuencia a = Frecuencia a Int
-- Define el tipo de datos Frecuencia parametrizado por a y con un contador Int.-
iniciarFrecuencia: inicializa una frecuencia con un valor y un contador de 1. -
contar: cuenta las ocurrencias de un valor en una lista y devuelve una frecuencia.
-
valor: devuelve el valor de la frecuencia. -
frecuencia: devuelve el contador de la frecuencia.
Define cómo mostrar una frecuencia como una cadena de caracteres.
Permite comparar dos frecuencias basándose en sus contadores.
data Hoffman = Hoja Char | Nodo Hoffman Hoffman
{-
Define el tipo de datos Hoffman con dos constructores:
> Hoja, para las hojas
> Nodo, para los nodos interiores.
-}nuevoHoffman: Crea una hoja con un carácter dado.fusionHoffman: Fusiona dos árboles de Huffman en un nodo.
-
obtenerCaracter: devuelve el caracter de una hoja. -
arbolIzquierdo: devuelve el subárbol izquierdo de un nodo. -
arbolDerecho: devuelve el subárbol derecho de un nodo.
codificacion: construye una codificación de Huffman para los caracteres del árbol.
Define cómo mostrar un árbol de Huffman como una cadena de caracteres.
· qualified Data.Map as Map --Para manejar el tipo Map.
· Data.List --Para manejar listas.
· Data.Ord --Para poder hacer comparaciones-
Función frecuencias: convierte cada carácter de la cadena en una hoja de Huffman y cuenta las ocurrencias de cada carácter.
unicosdevuelve una lista de caracteres únicos en la cadena.
-
Función ganadores: ordena las frecuencias y devuelve los dos elementos de menor frecuencia junto con el resto de la lista.
- Si la lista tiene menos de dos elementos, devuelve
Nothing.
- Si la lista tiene menos de dos elementos, devuelve
-
Función hoffman: construye el árbol de Huffman a partir de las frecuencias.
-
Utiliza la función construirArbol para iterativamente fusionar las dos frecuencias más bajas hasta que quede un solo árbol.
-
Si la cadena está vacía, devuelve
Nothing.
-
-
Función rarisimo: construye la codificación de Huffman para los caracteres en la cadena.
-
Utiliza
hoffmanpara obtener el árbol de Huffman ycodificacionpara obtener el mapa de codificación. -
Si la cadena está vacía, devuelve un mapa vacío.
-
Importamos los módulos necesarios para manejar archivos, entradas y salidas, y nuestros módulos RARisimo, Hoffman, y Frecuencia.
-
Función codificar: Lee el contenido de un archivo, genera la codificación de Huffman, y escribe el árbol y el contenido codificado en un nuevo archivo con la extensión
.raro. -
Función decodificar: Lee un archivo
.raro, decodifica el contenido utilizando el árbol de Huffman, y escribe el contenido decodificado en un nuevo archivo sin la extensión.raro. -
Función analizar: Calcula y muestra el tamaño original del archivo, el tamaño comprimido, y el porcentaje de ganancia o pérdida al codificar el archivo.
-
Función
mostrarMenuyejecutarOpcion: Muestran el menú de opciones al usuario y ejecutan la opción seleccionada. -
Función main: Inicia el programa, da la bienvenida al usuario, y muestra el menú de opciones.
Para compilar el proyecto, ejecute en la terminal el siguiente comando:
$ ghc -o rarisimo Cliente.hs -package containers -package filepath -package directoryIntroduzca y corra en la terminal el comando
$ ./rarisimoA continuación ingrese el numero correspondiente a la opción que desea ejecutar.
Para codificar/decodificar/analizar algún archivo:
- Si el archivo está en la misma carpeta donde está el cliente, escriba el nombre del archivo con su extensión. Ejemplo:
$ archivo.txt - Si está en alguna otra carpeta, indicar la ruta del archivo.
Ejemplo:$ C:\Users\Usuario\Desktop\archivo.txt