Advertisement
banovski

Ninety-Nine Haskell Problems: #5

Feb 3rd, 2025 (edited)
591
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Haskell 2.45 KB | Source Code | 0 0
  1. -- H-99: Ninety-Nine Haskell Problems: Problem 5: Reverse a list.
  2.  
  3. import Data.List (sortOn)
  4.  
  5. e1 :: String
  6. e1 = "A man, a plan, a canal, panama!"
  7.  
  8. e2 :: [Int]
  9. e2 = [1,2,3,4]
  10.  
  11. e3 :: [()]
  12. e3 = []
  13.  
  14. main :: IO ()
  15. main = do
  16.   printTestList [e1]
  17.   printTestList [e2]
  18.   printTestList [e3]
  19.  
  20. printTestList :: Show a => [[a]] -> IO ()
  21. printTestList list = mapM_ print
  22.   $ zip ([1 .. ] :: [Int])
  23.   $ functionsList <*> list
  24.  
  25. functionsList :: [[a] -> [a]]
  26. functionsList = [one, two, three, four, five, six, seven, eight, nine, ten, eleven]
  27.  
  28. one :: [a] -> [a]
  29. one = reverse
  30.  
  31. two :: [a] -> [a]
  32. two [] = []
  33. two (x:xs) = two xs ++ [x]
  34.  
  35. three :: [a] -> [a]
  36. three [] = []
  37. three list = three (tail list) ++ [head list]
  38.  
  39. four :: [a] -> [a]
  40. four = foldl (flip (:)) []
  41.  
  42. five :: [a] -> [a]
  43. five [] = []
  44. five list = last list : five (init list)
  45.  
  46. six :: [a] -> [a]
  47. six list = aux (length list - 1) list
  48.   where
  49.     aux _ [] = []
  50.     aux index lst = drop index lst ++ aux (index - 1) (take index lst)
  51.  
  52. seven :: [a] -> [a]
  53. seven [] = []
  54. seven list = aux list (length list - 1)
  55.   where
  56.     aux lst 0 = [head lst]
  57.     aux lst index = lst !! index : aux lst (index - 1)
  58.  
  59. eight :: [a] -> [a]
  60. eight list = map snd
  61.   $ sortOn fst
  62.   $ zip [(length list - 1), (length list - 2) .. 0] list
  63.  
  64. nine :: [a] -> [a]
  65. nine [] = []
  66. nine list = map (list !!) [u, p .. 0]
  67.   where
  68.     u = length list - 1
  69.     p = length list - 2
  70.  
  71. ten :: [a] -> [a]
  72. ten [] = []
  73. ten list = [u, p .. 0] >>= (\i -> [list !! i])
  74.     where
  75.     u = length list - 1
  76.     p = length list - 2
  77.  
  78. eleven :: [a] -> [a]
  79. eleven [] = []
  80. eleven list = [list !! x
  81.               | x <- [length list - 1, length list - 2 .. 0]]
  82.  
  83. -- (1,"!amanap ,lanac a ,nalp a ,nam A")
  84. -- (2,"!amanap ,lanac a ,nalp a ,nam A")
  85. -- (3,"!amanap ,lanac a ,nalp a ,nam A")
  86. -- (4,"!amanap ,lanac a ,nalp a ,nam A")
  87. -- (5,"!amanap ,lanac a ,nalp a ,nam A")
  88. -- (6,"!amanap ,lanac a ,nalp a ,nam A")
  89. -- (7,"!amanap ,lanac a ,nalp a ,nam A")
  90. -- (8,"!amanap ,lanac a ,nalp a ,nam A")
  91. -- (9,"!amanap ,lanac a ,nalp a ,nam A")
  92. -- (10,"!amanap ,lanac a ,nalp a ,nam A")
  93. -- (11,"!amanap ,lanac a ,nalp a ,nam A")
  94. -- (1,[4,3,2,1])
  95. -- (2,[4,3,2,1])
  96. -- (3,[4,3,2,1])
  97. -- (4,[4,3,2,1])
  98. -- (5,[4,3,2,1])
  99. -- (6,[4,3,2,1])
  100. -- (7,[4,3,2,1])
  101. -- (8,[4,3,2,1])
  102. -- (9,[4,3,2,1])
  103. -- (10,[4,3,2,1])
  104. -- (11,[4,3,2,1])
  105. -- (1,[])
  106. -- (2,[])
  107. -- (3,[])
  108. -- (4,[])
  109. -- (5,[])
  110. -- (6,[])
  111. -- (7,[])
  112. -- (8,[])
  113. -- (9,[])
  114. -- (10,[])
  115. -- (11,[])
  116.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement