Números poligonales y sus propiedades en Haskell

Un número poligonal es aquel que puede ser representado como puntos dispuestos en forma de polígono regular, empezando por el 1. Los primeros números poligonales son los números triangulares, estos se forman a partir de triángulos.
triangulares
Los siguientes son los números cuadrangulares
cuadrados
Los siguientes son los números pentagonales
pentagonales

Los números triangulares son 1, 3, 6, 10, 15, 21, … Sus diferencias son 2, 3, 4, 5, 6, … Por tanto, se obtienen como sigue

1 = 1
3 = 1+2
6 = 1+2+3
10 = 1+2+3+4
15 = 1+2+3+4+5
21 = 1+2+3+4+5+6

Los números cuadrangulares son 1, 4, 9, 16, 25, 36, 49, … Sus diferencias son 3, 5, 7, 9, … Por tanto, se obtienen como sigue

1 = 1
4 = 1+3
9 = 1+3+5
16 = 1+3+5+7
25 = 1+3+5+7+9
36 = 1+3+5+7+9+11
49 = 1+3+5+7+9+11+13

Los números pentagonales son 1, 5, 12, 22, 35, … Sus diferencias son 4, 7, 10, 13, … Por tanto, se obtienen como sigue

1 = 1
5 = 1+4
12 = 1+4+7
22 = 1+4+7+10
35 = 1+4+7+10+13

Siguiendo el mismo patrón, las diferencias entre los números hexagonales son 5, 9, 13, 17, … Por tanto, los primeros números hexagonales son

1 = 1
6 = 1+5
15 = 1+5+9
28 = 1+5+9+13
45 = 1+5+9+13+17

Continuando con este patrón se obtienen los número poligonales con k lados. Los siguientes son

k=7 Heptagonal: 1, 7, 18, 34, 55, 81, 112, 148, 189, 235, …
k=8 Octagonal: 1, 8, 21, 40, 65, 96, 133, 176, 225, 280, …
k=9 Nonagonal: 1, 9, 24, 46, 75, 111, 154, 204, 261, 325, …

En la siguiente relación de ejercicios (elaborada para I1M) se muestran distintas definiciones de los números poligonales y algunas de sus propiedades, como el teorema de Fermat, en Haskell.
Read More “Números poligonales y sus propiedades en Haskell”

El juego de Oslo en Haskell

En el número especial de la revista Mundo científico sobre El universo de los números se presenta el juego de Oslo. En dicho juego
se trata de obtener cualquier número natural no nulo, por medio de aplicaciones sucesivas de una de las reglas siguientes:

  1. poner un cero al final del número,
  2. poner un cuatro al final del número y
  3. dividir por 2 si el número es par.

Por ejemplo, el 3 y el 5 se pueden obtener como sigue

En la siguiente relación de ejercicios (elaborada para I1M) veremos qué números se pueden alcanzar, cómo y en cuántos pasos. Además, se presentan distintas soluciones comparando sus eficiencias.
Read More “El juego de Oslo en Haskell”

PeH: Codificación por longitud en Haskell

La codificación por longitud, o comprensión RLE (del inglés, “Run-length encoding”), es una compresión de datos en la que secuencias de datos con el mismo valor consecutivas son almacenadas como un único valor más su recuento. Por ejemplo, la cadena

se codifica por

Interpretado esto como 12 letras B, 1 letra N , 12 letras B, 3 letras N, etc.

En los siguientes ejercicios se definirán funciones para codificar y descodificar por longitud y comprobar que son operaciones inversas.
Read More “PeH: Codificación por longitud en Haskell”

PeH: Sucesión de Fibonacci, evaluación perezosa y números construibles

Continuando con ejemplos de evaluación perezosa en Haskell, un clásico es la sucsión de Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, … cuyos dos primeros términos son 0 y 1 y los restantes se calcula sumando los dos anteriores.

En la siguiente relación de ejercicios se presentan distintas definiciones de la sucesión de Fibonacci basadas en la evaluación perezosa y la última
usando números construibles mediante la librería Data.Real.Constructible.
Read More “PeH: Sucesión de Fibonacci, evaluación perezosa y números construibles”