I1M2013: Problema del concurso “Cifras y letras” en Haskell

En la segunda parte de la clase de hoy de Informática de 1º del Grado en Matemáticas hemos desarrollado un programa en Haskell para resolver los problemas aritméticos del concurso Cifras y letras que consisten en dada una sucesión de números naturales y un número objetivo, intentar construir una expresión cuyo valor es el objetivo combinando los números de la sucesión usando suma, resta, multiplicación, división y paréntesis. Además, cada número de la sucesión puede usarse como máximo una vez y todos los números, incluyendo los resultados intermedios tienen que ser enteros positivos (1,2,3,…).

Por ejemplo, dada la sucesión 1, 3, 7, 10, 25, 50 y el objetivo 765, una solución es (1+50)*(25−10). Para el problema anterior existen 780 soluciones. En cambio, con la sucesión anterior y el objetivo 831, no hay solución.

Se empieza formalizando el problema y definiendo una función para reconcer las soluciones. A continuación, se presentan tres soluciones: la primera por fuerza bruta, la segunda mediante generación y evaluación y la tercera con simplificaciones algebraicas. Se termina con una comparación de las tres soluciones.

El código del programa es
Read More “I1M2013: Problema del concurso “Cifras y letras” en Haskell”

I1M2013: Ejercicios de evaluación perezosa y listas infinitas en Haskell (3)

En la clase de hoy de Informática de 1º del Grado en Matemáticas hemos comentado las soluciones de los dos primeros ejercicios sobre evaluación perezosa y listas infinitas de la relación 17.

Los ejercicios de la relación 17, y sus soluciones, se muestran a continuación.
Read More “I1M2013: Ejercicios de evaluación perezosa y listas infinitas en Haskell (3)”

I1M2013: Definiciones de tipos de datos en Haskell

En la clase de hoy de Informática de 1º del Grado en Matemáticas se ha estudiado las definiciones de nuevos tipos de datos y de funciones sobre dichos tipos. Concretamente, se ha estudiado

  • cómo definir tipos usando type,
  • cómo definir funciones con dominio o rango en tipos definidos usando type,
  • cómo definir tipos usando data,
  • cómo definir funciones con dominio o rango en tipos definidos usando
  • data y

  • cómo definir tipos de datos recursivos usando como ejemplo los naturales, las listas y los árboles.

Se ha insistido en la metodología de definición de funciones recursivas sobre tipos de datos escribiendo una ecuación por cada uno de los constructores del tipo de dato.

Como caso de estudio se ha iniciado la construcción de un programa para determinar si una fórmula es una tautología. Para ello se ha definido el tipo de dato de las fórmulas proposicionales, el de las interpretaciones y una función para definir el valor de una fórmula respecto de una interpretación. Se ha dejado como ejercicio la definición de las restantes funciones para completar el programa.

El código correspondiente es
Read More “I1M2013: Definiciones de tipos de datos en Haskell”