I1M2011: Programa de cifras y letras en Haskell (1/2)

En la clase de hoy de Informática de 1º del Grado en Matemáticas hemos comenzado a desarrollar 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.

En esta clase hemos estudiado cómo escribir un programa para resolver el problema por fuerza bruta. En la próxima estudiaremos cómo mejorar el programa.

El código del programa es
Read More “I1M2011: Programa de cifras y letras en Haskell (1/2)”

I1M2011: Combinatoria en Haskell (3)

En la clase de hoy de Informática de 1º del Grado en Matemáticas se han explicado las soluciones de los ejercicios 13 a 34 de la 17ª relación.

El objetivo de esta relación es estudiar la generación y el número de las principales operaciones de la combinatoria. En concreto, se estudia

  • Permutaciones.
  • Combinaciones sin repetición..
  • Combinaciones con repetición
  • Variaciones sin repetición.
  • Variaciones con repetición.

Además, se estudia dos temas relacionados:

  • Reconocimiento y generación de subconjuntos y
  • El triángulo de Pascal

Los ejercicios, y sus soluciones, se muestran a continuación.
Read More “I1M2011: Combinatoria en Haskell (3)”

I1M2011: Ejercicios sobre tipos algebraicos en Haskell

En la clase de hoy de Informática de 1º del Grado en Matemáticas se han explicado las soluciones de los ejercicios de la 18ª relación.

En esta relación se presenta ejercicios sobre tipos de datos algebraicos. Se consideran dos tipos de datos algebraicos: los números naturales (para los que se define su producto) y los árboles binarios, para los que se definen funciones para calcular:

  • la ocurrencia de un elemento en el árbol,
  • el número de hojas
  • el carácter balanceado de un árbol,
  • el árbol balanceado correspondiente a una lista,

Los ejercicios, y sus soluciones, se muestran a continuación.
Read More “I1M2011: Ejercicios sobre tipos algebraicos en Haskell”