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
| 
					 1  | 
						   numeroPerdido :: [Int] -> Maybe Int  | 
					
tal que (numeroPerdido xs) es el resultado del problema del número perdidio en xs. Por ejemplo,
| 
					 1 2 3 4 5  | 
						   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
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24  | 
						import Data.List (tails, sort) import Data.Maybe (listToMaybe) -- 1ª solución numeroPerdido :: [Int] -> Maybe Int numeroPerdido (x:y:xs)   | abs (y - x) == 1 = numeroPerdido (y:xs)   | otherwise        = Just (div (x+y) 2) numeroPerdido _      = Nothing -- 2ª solución numeroPerdido2 :: [Int] -> Maybe Int numeroPerdido2 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 -- 3ª solución -- =========== numeroPerdido3 :: [Int] -> Maybe Int numeroPerdido3 xs =   listToMaybe [(a+b) `div` 2 | (a:b:_) <- tails xs, abs(a-b) /= 1]  | 
					
Pensamiento
¡Reventó de risa!
¡Un hombre tan serio!
… Nadie lo diría.Antonio Machado