Ir al contenido principal

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