Números superpares
Definir la función
1 |
superpar :: Int -> Bool |
tal que (superpar n) se verifica si n es un número par tal que todos sus dígitos son pares. Por ejemplo,
1 2 |
superpar 426 == True superpar 456 == False |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
-- 1ª definición (por recursión) superpar :: Int -> Bool superpar n | n < 10 = even n | otherwise = even n && superpar (n `div` 10) -- 2ª definición (por comprensión): superpar2 :: Int -> Bool superpar2 n = and [even d | d <- digitos n] digitos :: Int -> [Int] digitos n = [read [d] | d <- show n] -- 3ª definición (por recursión sobre los dígitos): superpar3 :: Int -> Bool superpar3 n = sonPares (digitos n) where sonPares [] = True sonPares (d:ds) = even d && sonPares ds -- la función sonPares se puede definir por plegado: superpar3' :: Int -> Bool superpar3' n = sonPares (digitos n) where sonPares ds = foldr ((&&) . even) True ds -- 4ª definición (con all): superpar4 :: Int -> Bool superpar4 n = all even (digitos n) -- 5ª definición (con filter): superpar5 :: Int -> Bool superpar5 n = filter even (digitos n) == digitos n -- 6ª definición (con filter): superpar6 :: Int -> Bool superpar6 n = all (`elem` "02468") (show n) |
Por recursión