Skip to content

cmhd2001/RARisimo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Proyecto 1: RARisimo

Estudiantes:
16-10782 Franco Murillo
18-10451 Carlo Herrera
19-10105 Daniela Avendaño


1. Explicación de Frecuencia

Definición del Tipo de Datos.

data Frecuencia a = Frecuencia a Int 
-- Define el tipo de datos Frecuencia parametrizado por a y con un contador Int.
Funciones de Construcción:
  • 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.

Funciones de Acceso:
  • valor: devuelve el valor de la frecuencia.

  • frecuencia: devuelve el contador de la frecuencia.

Instancia de Show.

Define cómo mostrar una frecuencia como una cadena de caracteres.

Instancia de Ord.

Permite comparar dos frecuencias basándose en sus contadores.


2. Explicación de Hoffman

Definición del Tipo de Datos.

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.
 -}
Funciones de Construcción.
  • nuevoHoffman: Crea una hoja con un carácter dado.
  • fusionHoffman: Fusiona dos árboles de Huffman en un nodo.
Funciones de Acceso:
  • 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.

Funciones de Transformación
  • codificacion: construye una codificación de Huffman para los caracteres del árbol.

Instancia de Show

Define cómo mostrar un árbol de Huffman como una cadena de caracteres.


3. Explicación de RARisimo

Módulos importados:

· 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.

    • unicos devuelve 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.
  • 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 hoffman para obtener el árbol de Huffman y codificacion para obtener el mapa de codificación.

    • Si la cadena está vacía, devuelve un mapa vacío.


4. Explicación del Cliente

Módulos Importados:

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 mostrarMenu y ejecutarOpcion: 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.


Guía de uso

Compilación.

Para compilar el proyecto, ejecute en la terminal el siguiente comando:

$ ghc -o rarisimo Cliente.hs -package containers -package filepath -package directory

Ejecución.

Introduzca y corra en la terminal el comando

$ ./rarisimo

A 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •