Definir la función
primeroNoConsecutivo :: (Eq a,Enum a) => [a] -> Maybe a |
tal que (primeroNoConsecutivo xs) es el primer elemento de la lista xs que no es igual al siguiente de su elemento anterior en xs o Nothing si tal elemento no existe. Por ejemplo
primeroNoConsecutivo [1,2,3,4,6,7,8] == Just 6 primeroNoConsecutivo "bcdfg" == Just 'f' primeroNoConsecutivo "bcdef" == Nothing |
Soluciones
import Data.Maybe (listToMaybe) -- 1ª solución primeroNoConsecutivo1 :: (Eq a, Enum a) => [a] -> Maybe a primeroNoConsecutivo1 xs | null ys = Nothing | otherwise = Just (head ys) where ys = [y | (z,y) <- zip xs (tail xs), y /= succ z] -- 2ª solución primeroNoConsecutivo2 :: (Eq a, Enum a) => [a] -> Maybe a primeroNoConsecutivo2 xs = listToMaybe [y | (z,y) <- zip xs (tail xs), y /= succ z] -- 3ª solución primeroNoConsecutivo3 :: (Eq a,Enum a) => [a] -> Maybe a primeroNoConsecutivo3 (x:y:zs) | succ x /= y = Just y | otherwise = primeroNoConsecutivo3 (y:zs) primeroNoConsecutivo3 _ = Nothing -- 4ª solución primeroNoConsecutivo :: (Eq a,Enum a) => [a] -> Maybe a primeroNoConsecutivo [] = Nothing primeroNoConsecutivo (x:ys) = aux x ys where aux _ [] = Nothing aux x' (z:zs) | z == succ x' = aux z zs | otherwise = Just z |
Otras soluciones
- Se pueden escribir otras soluciones en los comentarios.
- El código se debe escribir entre una línea con <pre lang="haskell"> y otra con </pre>
Pensamiento
«La única enseñanza que un profesor puede dar, en mi opinión, es la de pensar delante de sus alumnos.»
En Maxima
En Python
En Julia