PFH: La semana en Exercitium (4 de noviembre de 2022)

Esta semana he publicado en Exercitium las soluciones de los siguientes problemas:

A continuación se muestran las soluciones.

1. Número a partir de sus dígitos

Definir la función

tal que listaNumero xs es el número formado por los dígitos xs. Por ejemplo,

1.1. Soluciones en Haskell

1.2. Soluciones en Python

2. Exponente de la mayor potencia de x que divide a y

Definir la función

tal que mayorExponente a b es el exponente de la mayor potencia de a que divide a b. Por ejemplo,

Nota: Se supone que a > 1 y b > 0.

2.1. Soluciones en Haskell

2.2. Soluciones en Python

3. Producto cartesiano de dos conjuntos

Definir la función

tal que producto xs ys es el producto cartesiano de xs e ys. Por ejemplo,

Comprobar con QuickCheck que el número de elementos de producto xs y es el producto del número de elementos de xs y de ys.

3.1. Soluciones en Haskell

3.2. Soluciones en Python

4. Subconjuntos de un conjunto

Definir la función

tal que subconjuntos xs es la lista de las subconjuntos de la lista xs. Por ejemplo,

Comprobar con QuickChek que el número de elementos de subconjuntos xs es 2 elevado al número de elementos de xs.

4.1. Soluciones en Haskell

4.2. Soluciones en Python

5. El algoritmo de Luhn

El objetivo de este ejercicio es estudiar un algoritmo para validar algunos identificadores numéricos como los números de algunas tarjetas de crédito; por ejemplo, las de tipo Visa o Master Card.

El algoritmo que vamos a estudiar es el algoritmo de Luhn consistente en aplicar los siguientes pasos a los dígitos del número de la tarjeta.

  1. Se invierten los dígitos del número; por ejemplo, [9,4,5,5] se transforma en [5,5,4,9].
  2. Se duplican los dígitos que se encuentra en posiciones impares (empezando a contar en 0); por ejemplo, [5,5,4,9] se transforma en [5,10,4,18].
  3. Se suman los dígitos de cada número; por ejemplo, [5,10,4,18] se transforma en 5 + (1 + 0) + 4 + (1 + 8) = 19.
  4. Si el último dígito de la suma es 0, el número es válido; y no lo es, en caso contrario.

A los números válidos, se les llama números de Luhn.

Definir las siguientes funciones:

tales que

  • digitosInv n es la lista de los dígitos del número n, en orden inverso. Por ejemplo,

  • doblePosImpar ns es la lista obtenida doblando los elementos de ns en las posiciones impares (empezando a contar en cero y dejando igual a los que están en posiciones pares. Por ejemplo,

  • sumaDigitos ns es la suma de los dígitos de ns. Por ejemplo,

  • ultimoDigito n es el último dígito de n. Por ejemplo,

  • luhn n se verifica si n es un número de Luhn. Por ejemplo,

5.1. Soluciones en Haskell

5.2. Soluciones en Python