Advertisement
Guest User

Untitled

a guest
Jul 16th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.88 KB | None | 0 0
  1. without :: Eq a => [a] -> [a] -> [a]
  2. without a [] = a
  3. without a (x:xs) = filter (/=x) a `without` xs
  4.  
  5. dis :: [Int] -> [[Int]]
  6. dis = dis' [[]] 1
  7. where
  8. dis' s k p = if k == -1
  9. then init s
  10. else dis' s' k' p
  11. where
  12. s' = if k'' `elem` visited
  13. then s ++ [[k']]
  14. else (init s) ++ [(last s ++ [k'])]
  15.  
  16. k' = if k'' `elem` visited
  17. then next s k
  18. else get p k
  19.  
  20. k'' = get p k
  21. next s k = head $ ([1..length p] `without` (visited)) ++ [-1]
  22. visited = concat s
  23. get p k = p !! (k-1)
  24.  
  25. main = do
  26. let perm1 = [3, 2, 4, 1, 5]
  27. let perm2 = [1, 2, 3, 4, 5]
  28. let perm3 = [2, 3, 4, 5, 1]
  29. print $ dis perm1
  30. print $ dis perm2
  31. print $ dis perm3
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement