División equitativa
Definir la función
divisionEquitativa :: [Int] -> Maybe ([Int],[Int])
tal que (divisionEquitativa xs) determina si la lista de números enteros positivos xs se puede dividir en dos partes (sin reordenar sus elementos) con la misma suma. Si es posible, su valor es el par formado por las dos partes. Si no lo es, su valor es Nothing. Por ejemplo,
divisionEquitativa [1,2,3,4,5,15] == Just ([1,2,3,4,5],[15]) divisionEquitativa [15,1,2,3,4,5] == Just ([15],[1,2,3,4,5]) divisionEquitativa [1,2,3,4,7,15] == Nothing divisionEquitativa [1,2,3,4,15,5] == Nothing
Soluciones
import Data.Maybe (isNothing, fromJust) import Data.List (elemIndex) divisionEquitativa :: [Int] -> Maybe ([Int],[Int]) divisionEquitativa xs | odd n = Nothing | isNothing p = Nothing | otherwise = Just (splitAt (1 + fromJust p) xs) where n = sum xs ys = scanl1 (+) xs p = elemIndex (n `div` 2) ys