Rompecabeza de Ullman en Haskell

El problema de Programming Praxis del 7 de diciembre de 2010 consiste en resolver el siguiente rompecabeza de Jeffrey Ullman:

Dada una lista de n números reales, un número real t y un número entero k, determinar si existe un subconjunto de la lista original con k elementos tal que su suma es menor que t.

Por ejemplo, dada la lista de los 25 números reales 18.1, 55.1, 91.2, 74.6, 73.0, 85.9, 73.9, 81.4, 87.1, 49.3, 88.8, 5.7, 26.3, 7.1, 58.2, 31.7, 5.8, 76.9, 16.5, 8.1, 48.3, 6.8, 92.4, 83.0, 19.6, t = 98.2 y k = 3, el conjunto {31.7, 16.5, 19.6} tiene 3 elementos y su suma es 67.8 que es menor que 98.2. Por tanto, el resultado es verdadero.

A partir de dicho problema he preparado la siguiente relación de ejercicios para la asignatura de Informática de 1º del Grado en Matemáticas
Read More “Rompecabeza de Ullman en Haskell”

Problema sobre números naturales

El enunciado del problema de Gaussianos de hoy es el siguiente:

Sea n>1 un número natural. Si denotamos como \lfloor k \rfloor a la parte entera del número real k (es decir, el mayor número entero menor o igual que k), demostrar que existe un único natural x < n^2[/latex] tal que [latex] \lfloor n^2/x+1 \rfloor[/latex] es divisible por [latex]n[/latex]. Indicar también el valor de [latex]x[/latex].

El problema ha servido de base para la siguiente relación de ejercicios, para el curso de Informática de 1º del Grado en Matemáticas, en la que se conjetura la respuesta con Haskell y se comprueba con QuickCheck.
Read More "Problema sobre números naturales"

Desarrollo del comando wc de Unix en Haskell

wc (en referencia a los términos ingleses “word count”) es un comando utilizado en el sistema operativo Unix que se utiliza para saber el número de palabras, líneas y caracteres de un fichero. Por ejemplo, si tenemos un fichero ciudades.txt cuyo contenido es

podemos contar con wc sus líneas, palabras y caracteres como sigue

En Haskell se pueden desarrollar programas simples con análogo comportamiento. Por ejemplo se puede contar las líneas del fichero como sigue

El contenido del programa CuentaLineas.hs es simplemente

Read More “Desarrollo del comando wc de Unix en Haskell”

El tipo abstracto de datos de las pilas en Haskell

En este artículo continúo la serie dedicada a los tipos de datos abstractos (TAD) en Haskell presentando el TAD de las pilas.

En artículos anteriores presenté los TAD de los polinomios y el de los conjuntos. En éste voy a presentar el TAD de las pilas y sus implementaciones en Haskell.

Al igual que hice en los anteriores TAD, usaré módulos, funciones de escritura y QuickCheck para conseguir la abstracción, independencia y certificación de los resultados de las implementaciones.

El contenido del resto del artículo es el siguiente: el TAD de las pilas, las implementaciones en Haskell mediante tipos algebraicos y mediante listas y la comprobación con QuickCheck de sus propiedades.
Read More “El tipo abstracto de datos de las pilas en Haskell”