Advertisement
Guest User

Untitled

a guest
May 26th, 2016
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import Data.List ( permutations )
  2.  
  3. symmetric :: Int -> [[Int]]
  4. symmetric n = permutations [1..n]
  5.  
  6. inversions :: Int -> [Int] -> Int
  7. inversions n [] = n
  8. inversions n (x:[]) = n
  9. inversions n (x:xs) = inversions (n+m) xs
  10.   where
  11.     -- is x greater than values in xs?
  12.     gs :: [Bool]
  13.     gs = fmap (x >) xs
  14.  
  15.     -- number of times x is greater
  16.     m :: Int
  17.     m = (sum . fmap fromEnum) gs
  18.  
  19. countInversions :: [Int] -> Int
  20. countInversions xs = inversions 0 xs
  21.  
  22. main :: IO ()
  23. main = print $ filter (even . countInversions) (symmetric 3)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement