Triángulo aritmético

Los triángulos aritméticos se forman como sigue

Definir las funciones

tales que

  • linea n es la línea n-ésima de los triángulos aritméticos. Por ejemplo,

  • triangulo n es el triángulo aritmético de altura n. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub.

Suma de cuadrados menos cuadrado de la suma

Definir la función

tal que euler6 n es la diferencia entre el cuadrado de la suma de los n primeros números y la suma de los cuadrados de los nprimeros números. Por ejemplo,

Nota: Este ejercicio está basado en el problema 6 del proyecto Euler.

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub.

Suma de los cuadrados de los primeros números naturales

Definir la función

tal que sumaDeCuadrados n es la suma de los cuadrados de los primeros n números; es decir, 1² + 2² + … + n². Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub.

Suma de los primeros números naturales

Definir la función

tal suma n es la suma de los n primeros números. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub

Números libres de cuadrados

Un número es libre de cuadrados si no es divisible por el cuadrado de ningún entero mayor que 1. Por ejemplo, 70 es libre de cuadrado porque sólo es divisible por 1, 2, 5, 7 y 70; en cambio, 40 no es libre de cuadrados porque es divisible por 2^2.

Definir la función

tal que libreDeCuadrados x se verifica si x es libre de cuadrados. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub.

Divisores primos

Definir la función

tal que divisoresPrimos x es la lista de los divisores primos de x. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub.

Divisores de un número

Definir la función

tal que divisores n es la lista de los divisores de n. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub.

Diferencia conjuntista de listas

Definir la función

tal que diferencia xs ys es la diferencia de las listas sin elementos repetidos xs e ys. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub.

Intersección conjuntista de listas

Definir la función

tal que interseccion xs ys es la intersección de las listas sin elementos repetidos xs e ys. Por ejemplo,

Soluciones en Haskell

El código se encuentra en GitHub.

Soluciones en Python

El código se encuentra en GitHub.

Unión conjuntista de listas

Definir la función

tal que union xs ys es la unión de las listas, sin elementos repetidos, xs e ys. Por ejemplo,

Comprobar con QuickCheck que la unión es conmutativa.

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub

Igualdad de conjuntos

Definir la función

tal que iguales xs ys se verifica si xs e ys son iguales como conjuntos. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub

Reconocimiento de subconjunto

Definir la función

tal que subconjunto xs ys se verifica si xs es un subconjunto de ys. por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub.

Comentarios

  • La expresión «x pertenece a ys» se escribe
    • en Haskell, como x `elem` ys
    • en Python, como x in ys
  • La expresión «todos los elementos de xs verifican la propiedad p» se escribe
    • en Haskell, como all p xs
    • en Python, como all(p(x) for x in xs)
  • Si xs e ys son conjuntos, la expresión «xs es subconjunto de ys» se escribe
    • en Haskell, como xs `isSubsetOf` ys
    • en Python, como xs <= ys

Números racionales

Los números racionales pueden representarse mediante pares de números enteros. Por ejemplo, el número 2/5 puede representarse mediante el par (2,5).

Definir las funciones

tales que

  • formaReducida x es la forma reducida del número racional x. Por ejemplo,

  • sumaRacional x y es la suma de los números racionales x e y, expresada en forma reducida. Por ejemplo,

  • productoRacional x y es el producto de los números racionales x e y, expresada en forma reducida. Por ejemplo,

  • igualdadRacional x y se verifica si los números racionales x e y son iguales. Por ejemplo,

Comprobar con QuickCheck la propiedad distributiva del producto racional respecto de la suma.

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub.

Intersección de intervalos cerrados

Los intervalos cerrados se pueden representar mediante una lista de dos números (el primero es el extremo inferior del intervalo y el segundo el superior).

Definir la función

tal que (interseccion i1 i2) es la intersección de los intervalos i1 e i2. Por ejemplo,

Comprobar con QuickCheck que la intersección de intervalos es conmutativa.

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub.

Fórmula de Herón para el área de un triángulo

La fórmula de Herón, descubierta por Herón de Alejandría, dice que el área de un triángulo cuyo lados miden a, b y c es la raíz cuadrada de s(s-a)(s-b)(s-c) donde s es el semiperímetro

Definir la función

tal que (area a b c) es el área del triángulo de lados a, b y c. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub.

Raíces de la ecuación de segundo grado

Definir la función

tal que (raices a b c) es la lista de las raíces reales de la ecuación ax^2 + bx + c = 0. Por ejemplo,

Comprobar con QuickCheck que la suma de las raíces de la ecuación ax^2 + bx + c = 0 (con a no nulo) es \dfrac{-b}{a} y su producto es \dfrac{c}{a}.

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub.

Número de raíces de la ecuación de segundo grado

Definir la función

tal que (numeroDeRaices a b c) es el número de raíces reales de la ecuación ax^2 + bx + c = 0. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub.

Comentarios

  • En Haskell se usa un entorno local con where d = b^2-4*a*c y en Python se usa la asignación d = b ** 2 - 4 * a * c.

Mayor número con dos dígitos dados

Definir la función

tal que (numeroMayor x y) es el mayor número de dos cifras que puede construirse con los dígitos x e y. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub.

Permutación cíclica

Definir la función

tal que (ciclo xs) es la lista obtenida permutando cíclicamente los elementos de la lista xs, pasando el último elemento al principio de la lista. Por ejemplo,

Comprobar que la longitud es un invariante de la función ciclo; es decir, la longitud de (ciclo xs) es la misma que la de xs.

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub


Soluciones en Python

El código se encuentra en GitHub.

Distancia entre dos puntos

Definir la función

tal que (distancia p1 p2) es la distancia entre los puntos p1 y p2. Por ejemplo,

Comprobar con QuickCheck que se verifica la propiedad triangular de la distancia; es decir, dados tres puntos p1, p2 y p3, la distancia de p1 a p3 es menor o igual que la suma de la distancia de p1 a p2 y la de p2 a p3.

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub.

Comentarios

  • La raíz cuadrada de x se escribe
    • en Haskell, como sqrt x y
    • en Python, como sqrt(x) y hay que importarla del módulo math.

Intercambio de componentes de un par

Definir la función

tal que (intercambia p) es el punto obtenido intercambiando las coordenadas del punto p. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub.

Comentarios

  • En Haskell se pone el patrón en los argumentos y en Python hay que extraerlos mediante un asignación.

Mayor rectángulo

Las dimensiones de los rectángulos puede representarse por pares; por ejemplo, (5,3) representa a un rectángulo de base 5 y altura 3.

Definir la función

tal que (mayorRectangulo r1 r2) es el rectángulo de mayor área entre r1 y r2. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub.

Disyunción excluyente

La disyunción excluyente de dos fórmulas se verifica si una es verdadera y la otra es falsa. Su tabla de verdad es

Definir la función

tal que (xor x y) es la disyunción excluyente de x e y. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

El código se encuentra en GitHub.


Soluciones en Python

El código se encuentra en GitHub.

Comentarios

  • La negación de x se escribe igual en Haskell y Python; not x

  • La disyunción de x e y se escribe

    • en Haskell, como x || y y
    • en Python, como x or y.