El problema de las puertas en Haskell

En Gaussianos han comentado esta semana El problema de las 100 puertas y los divisores de un número natural cuyo enunciado es el siguiente

Supongamos que tenemos n puertas numeradas del 1 al n que están todas cerradas. Realizaremos, para cada puerta, el siguiente proceso: cambiar de estado todas las puertas cuyo número sea múltiplo de la puerta en la que estemos en ese momento. El problema consiste en caracterizar las puertas que quedan abierta al final del proceso.

Por ejemplo, supongamos que n=5 y usamos A para indicar que la puerta está abierta y C para indicar que está cerrada.

  • Inicialmente, nos encontramos en la posición 1 y el estado de las puertas es CCCCC.
  • Cambiamos de estado todas las puertas que tienen como número un múltiplo de 1 (es decir, en este caso las abrimos todas, con lo que tenemos AAAAA) y aumentamos la posición a 2.
  • Cambiamos de estado todas las puertas que tienen como número un múltiplo de 2, (es decir, cerramos la 2 y la 4, con lo que tenemos ACACA) y aumentamos la posición a 3.
  • Cambiamos de estado todas las puertas que tienen como número un múltiplo de 3, (es decir, cerramos la 3, con lo que tenemos ACCCA) y aumentamos la posición a 4.
  • Cambiamos de estado todas las puertas que tienen como número un múltiplo de 4, (es decir, abrimos la 4, con lo que tenemos ACCAA) y aumentamos la posición a 5.
  • Cambiamos de estado todas las puertas que tienen como número un múltiplo de 4, (es decir, cerramos la 5, con lo que tenemos ACCAC).

En este ejemplo han quedado abiertas la puerta 1 y la puerta 4.

Basándome en este problema he escrito la siguiente relación de ejercicios de Haskell para la asignatura de Informática de 1º del Grado en Matemáticas
Read More “El problema de las puertas en Haskell”

Un problema de las olimpiadas rusas en Haskell

En el blog Números y algo más plantean hoy un problema de las olimpiadas rusas cuyo enunciado es el siguiente

Si escribimos todos los números enteros empezando por el uno, uno al lado del otro (o sea, 1234567891011121314…), ¿qué dígito ocupa la posición 206788?

Basándome en este problema he escrito la siguiente relación de ejercicios de Haskell para la asignatura de Informática de 1º del Grado en Matemáticas como ejemplo de uso de cadenas infinitas.
Read More “Un problema de las olimpiadas rusas en Haskell”

Libro de ejercicios de programación con Haskell

A lo largo de este curso he ido actualizando un libro de ejercicios resueltos de programación con Haskell con las relaciones de ejercicios del curso de Informática (de 1º del Grado en Matemáticas)

Una vez terminado el curso, se ha completado el libro con todas las relaciones del curso y dos apéndices en los que se encuentran las soluciones de los exámenes realizados y una recopilación de algoritmos matemáticos que se han estudiado a lo largo del curso.

“Sorpresa sumando potencias de 2” en Haskell

Recientemente, se publicó en Gaussianos el artículo Sorpresa sumando potencias de 2 en el que se comentaba cómo, a partir de las representaciones de los números naturales como sumas de potencias de 2 se puede obtener una enumeración de los racionales. También se comentaba la equivalencia de la numeración anterior con el recorrido en anchura del árbol de Calkin-Wilf.

A partir de dicho artículo y sus fuentes (el artículo de Neil Calkin y Herbert S. Wilf Recounting the rationals y el artículo de la wikipedia Calkin-Wilf tree), he elaborado la siguiente relación de ejercicios de Haskell para la asignatura de Informática de 1º del Grado en Matemáticas.

En la relación se incluye tanto la construcción de las dos enumeraciones en Haskell como la verificación de sus propiedades con QuickCheck. Finalmente, se incluye el cálculo del número de las representaciones hiperbinarias mediante la función “fucs”.
Read More ““Sorpresa sumando potencias de 2” en Haskell”