Números de Munchausen
Un número de Munchausen es un número entero positivo tal que es igual a la suma de sus dígitos elevados a sí mismo. Por ejemplo, 3435 es un número de Munchausen ya que
1 |
3³ + 4⁴ + 3³ + 5⁵ = 27 + 256 + 27 + 3125 = 3435 |
Definir la función
1 |
esMunchausen :: Integer -> Bool |
tal que (esMunchausen n) se verifica si n es un número de Munchausen. Por ejemplo,
1 2 |
esMunchausen 3435 == True esMunchausen 2020 == False |
Comprobar con QuickCheck que que los únicos números de Munchausen son 1 y 3435.
Nota 1: No usar la propiedad en la definición.
Nota 2: El ejercicio está basado en el artículo ¿Por qué 3435 es uno de mis números favoritos? de Miguel Ángel Morales en El Aleph.
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import Test.QuickCheck esMunchausen :: Integer -> Bool esMunchausen n = n == sum [x^x | x <- digitos n] -- (digitos n) es la lista de los dígitos de n. Por ejemplo, -- digitos 3435 == [3,4,3,5] digitos :: Integer -> [Integer] digitos n = [read [c] | c <- show n] -- La propiedad es prop_Munchausen :: Integer -> Property prop_Munchausen n = n > 0 ==> esMunchausen n == elem n [1, 3435] -- La comprobación es -- λ> quickCheck prop_Munchausen -- +++ OK, passed 100 tests. |
Pensamiento
Escribiré en tu abanico:
te quiero para olvidarte,
para quererte te olvido.Antonio Machado
3 Comentarios