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