Skip to content

Instantly share code, notes, and snippets.

@fgaray
Created April 13, 2016 18:56
Show Gist options
  • Save fgaray/1f9a86eb5810fff8381f07830b4ffef3 to your computer and use it in GitHub Desktop.
Save fgaray/1f9a86eb5810fff8381f07830b4ffef3 to your computer and use it in GitHub Desktop.
{-# LANGUAGE ScopedTypeVariables #-}
import Test.QuickCheck
equilibrium :: forall a. (Eq a, Num a) => [a] -> [Int]
equilibrium [] = []
equilibrium [_] = []
equilibrium (x:xs) = equilibrium' 0 0 x (sum xs) xs
where
equilibrium' :: (Eq a, Num a) => Int -> a -> a -> a -> [a] -> [Int]
equilibrium' i s1 m s2 []
| s1 == s2 = [i]
| otherwise = []
equilibrium' i s1 m s2 (x:xs)
| s1 == s2 = i : equilibrium' (i + 1) (s1 + m) x (s2 - x) xs
| otherwise = equilibrium' (i + 1) (s1 + m) x (s2 - x) xs
prop xs = all (\i -> antes i xs == despues i xs) . equilibrium $ xs
where
antes i = sum . take i
despues i = sum . drop (i + 1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment