El problema del número perdido
Sea xs una lista de números consecutivos (creciente o decreciente), en la que puede faltar algún número. El problema del número perdido en xs consiste en lo siguiente:
- si falta un único número z, devolver Just z
- si no falta ninguno, devolver Nothing
Definir la función
numeroPerdido :: [Int] -> Maybe Int
tal que (numeroPerdido xs) es el resultado del problema del número perdidio en xs. Por ejemplo,
numeroPerdido [7,6,4,3] == Just 5 numeroPerdido [1,2,4,5,6] == Just 3 numeroPerdido [6,5..3] == Nothing numeroPerdido [1..6] == Nothing numeroPerdido ([5..10^6] ++ [10^6+2..10^7]) == Just 1000001
Soluciones
import Data.List (sort) numeroPerdido :: [Int] -> Maybe Int numeroPerdido xs = aux z (z:zs) where (z:zs) = sort xs aux _ [] = Nothing aux y (x:xs) | y == x = aux (y+1) xs | otherwise = Just y