El mes de abril en Exercitium (Ejercicios con Haskell y Python)

Durante el mes de abril he publicado en Exercitium las soluciones de los siguientes problemas:

A continuación se muestran las soluciones.

1. Caminos en un triángulo

Los triángulos se pueden representar mediante listas de listas. Por ejemplo, el triángulo

se representa por

Definir la función

tal que (caminos xss) es la lista de los caminos en el triángulo donde los caminos comienzan en el elemento de la primera fila, en cada paso se mueve a uno de sus dos elementos adyacentes en la fila siguiente y terminan en la última fila. Por ejemplo,

1.1. Soluciones en Haskell

1.2. Soluciones en Python

2. Máxima suma de caminos en un triángulo

Los triángulos se pueden representar mediante listas de listas. Por ejemplo, el triángulo

se representa por

Definir la función

tal que (maximaSuma xss) es el máximo de las sumas de los de los caminos en el triángulo xss donde los caminos comienzan en el elemento de la primera fila, en cada paso se mueve a uno de sus dos elementos adyacentes en la fila siguiente y terminan en la última fila. Por ejemplo,

2.1. Soluciones en Haskell

2.2. Soluciones en Python

3. Números amigos

Dos números amigos son dos números positivos distintos tales que la suma de los divisores propios de cada uno es igual al otro. Los divisores propios de un número incluyen la unidad pero no al propio número. Por ejemplo, divisores propios de 220 son 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y 110. La suma de estos números equivale a 284. A su vez, los divisores propios de 284 son 1, 2, 4, 71 y 142. Su suma equivale a 220. Por tanto, 220 y 284 son amigos.

Definir la función

tal que amigos x y se verifica si los números x e y son amigos. Por ejemplo,

3.1. Soluciones en Haskell

3.2. Soluciones en Python

4. Primos equidistantes

Definir la función

tal que primosEquidistantes k es la lista de los pares de primos cuya diferencia es k. Por ejemplo,

4.1. Soluciones en Haskell

4.2. Soluciones en Python

5. Numeración de las ternas de números naturales

Las ternas de números naturales se pueden ordenar como sigue

Definir la función

tal que posicion (x,y,z) es la posición de la terna de números naturales (x,y,z) en la ordenación anterior. Por ejemplo,

Comprobar con QuickCheck que

  • la posición de (x,0,0) es x(x²+6x+11)/6
  • la posición de (0,y,0) es y(y²+3y+ 8)/6
  • la posición de (0,0,z) es z(z²+3z+ 2)/6
  • la posición de (x,x,x) es x(9x²+14x+7)/2

5.1. Soluciones en Haskell

5.2. Soluciones en Python

6. Números triangulares con n cifras distintas

Los números triangulares se forman como sigue

La sucesión de los números triangulares se obtiene sumando los números naturales. Así, los 5 primeros números triangulares son

Definir la función

tal que triangularesConCifras n es la lista de los números triangulares con n cifras distintas. Por ejemplo,

6.1. Soluciones en Haskell

6.2. Soluciones en Python