Posiciones de equilibrio

Se dice que k es una posición de equilibrio de una lista xs si la suma de los elementos de xs en las posiciones menores que k es igual a la suma de los elementos de xs en las posiciones mayores que k. Por ejemplo, en la lista [-7,1,5,2,-4,3,0] el 3 es una posición de equilibrio ya que -7+1+5 = -4+3+0; también lo es el 6 ya que -7+1+5+2+(-4)+3 = 0.

Definir la función,

tal que (equilibrios xs) es la lista de las posiciones de equilibrio de xs. Por ejemplo,

Soluciones

8 Comentarios

  1. equilibrios :: [Int] -> [Int]
    equilibrios xs = [ t | ((n,v),t) [(Int,Int)]
    sumas xs = zip (sumasIzquierdas xs) (sumasDerechas xs)

    sumasIzquierdas :: [Int] -> [Int]
    sumasIzquierdas xs = map sum (map fst (divisiones xs ++ [(init xs, [])]))

    sumasDerechas :: [Int] -> [Int]
    sumasDerechas xs = map sum (map snd (divisiones xs ++ [(init xs, [])]))

    divisiones :: [Int] -> [([Int],[Int])]
    divisiones [] = []
    divisiones [_] = []
    divisiones (x:xs) = ([],xs) : [(x: is,ds) | (is,ds) <- divisiones xs]

Leave a Reply to paumacparCancel reply