Advertisement
Guest User

Untitled

a guest
Jan 16th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.79 KB | None | 0 0
  1. import Data.Char
  2.  
  3. longestNum [] = []
  4. longestNum (x:xs) =
  5. let withCount = foldl (\((prev, cnt):acc) x ->
  6. if x==prev then (x,cnt+1):acc else (x,1):(prev,cnt):acc) [(x, 1)] xs
  7. digitsOnly = filter (isDigit . fst) withCount
  8. max = foldl1 (\(maxChar, maxCount) (candidateChar, candidateMax) ->
  9. if candidateMax > maxCount then (candidateChar, candidateMax) else (maxChar, maxCount)) digitsOnly
  10. in if digitsOnly == []
  11. then []
  12. else take (snd max) $ repeat (fst max)
  13.  
  14.  
  15.  
  16. reduceStr :: String -> String
  17. reduceStr xs = let res = (reduceStrOnce xs)
  18. in
  19. if(xs == res)
  20. then res
  21. else reduceStr res
  22.  
  23. reduceStrOnce :: String -> String
  24. reduceStrOnce [] = []
  25. reduceStrOnce [x] = [x]
  26. reduceStrOnce (x:y:xs) = if((((toUpper x) == y) || ((toLower x) == y)) && x /= y)
  27. then reduceStrOnce(xs)
  28. else [x] ++ reduceStrOnce(y:xs)
  29.  
  30.  
  31.  
  32.  
  33.  
  34. line :: (Double , Double ) -> (Double , Double ) -> (Double -> Double)
  35. line (x1,y1) (x2,y2) = (\x -> y1 + (((x-x1)*(y2-y1)) /(x2-x1)))
  36.  
  37. liesOn :: (Double -> Double) ->((Double , Double) -> Bool)
  38. liesOn f = (\(x1,y1) -> (if (f x1) == y1
  39. then True
  40. else False))
  41.  
  42.  
  43. data BTree = NullT | Node (Float,Float) BTree BTree
  44.  
  45. orderedTree :: BTree -> Bool
  46. orderedTree tree = compareTree (inorderTree tree)
  47.  
  48.  
  49. inorderTree :: BTree ->[(Float,Float)]
  50. inorderTree NullT = []
  51. inorderTree (Node (a,b) t1 t2) = (inorderTree t1) ++ [(a,b)] ++ (inorderTree t2)
  52.  
  53. compareTree :: [(Float,Float)] -> Bool
  54. compareTree [] = True
  55. compareTree [x] = True
  56. compareTree ((a,b) :(c,d):xs)
  57. | (c <= a) && (b <= d) = compareTree ((c,d):xs)
  58. | otherwise = False
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65. verify actual expected =
  66. if actual == expected
  67. then "OK"
  68. else error ("Expected " ++ (show expected) ++ " actual " ++ (show actual))
  69.  
  70. main = do
  71. print "task 1"
  72. print $ verify (longestNum "") ""
  73. print $ verify (longestNum "1") "1"
  74. print $ verify (longestNum "a") ""
  75. print $ verify (longestNum "122") "22"
  76. print $ verify (longestNum "122000") "000"
  77. print $ verify (longestNum "11111ddddddd11111") "11111"
  78. print $ verify (longestNum "ab1d22b1b434442cd31d22e1eff") "444"
  79. print $ verify (longestNum "44ab1444111d22b1b4344442cd31ccccccd224e1eff44") "4444"
  80. print "task 2 reduceStr"
  81. -- print $ verify (reduceStr "") ""
  82. print $ verify (reduceStr "Aa") ""
  83. print $ verify (reduceStr "BaAb") ""
  84. print $ verify (reduceStr "aabbccddAABBCCDD") "aabbccddAABBCCDD"
  85. print $ verify (reduceStr "aCaAcb") "ab"
  86. print $ verify (reduceStr "dabAcCaCBAcCcaDD") "dabCBAcaDD"
  87. print $ verify (reduceStr "abcdDCBA") ""
  88. print "task 3 line"
  89. print $ verify (line (1, 1) (3, 2) 0) 0.5
  90. print $ verify (line (1, 1) (3, 2) 2) 1.5
  91. print $ verify (line (1, 1) (3, 2) 1) 1
  92. print $ verify (line (1, 1) (3, 2) 3) 2
  93. print $ verify (line (1, 1) (3, 2) (-1)) 0
  94. print "task 3 liesOn"
  95. print $ verify (liesOn (line (1, 1) (3, 2)) (0, 0.5)) True
  96. print $ verify (liesOn (line (1, 1) (3, 2)) (1, 1)) True
  97. print $ verify (liesOn (line (1, 1) (3, 2)) (3, 2)) True
  98. print $ verify (liesOn (line (1, 1) (3, 2)) (2, 1.5)) True
  99. print $ verify (liesOn (line (1, 1) (3, 2)) ((-1), 0)) True
  100. print $ verify (liesOn (line (1, 1) (3, 2)) (1, 0)) False
  101. print "task 4 orderedTree"
  102. print $ verify (orderedTree t11) False
  103. print $ verify (orderedTree t12) True
  104. print $ verify (orderedTree t13) False
  105. print $ verify (orderedTree t14) True
  106. print $ verify (orderedTree t1) True
  107. print $ verify (orderedTree t2) False
  108. -- print $ verify (orderedTree t15) False
  109.  
  110.  
  111. t11 = Node (1.0, 3.0) (Node (1.0, 4.0) NullT NullT) NullT
  112. t12 = Node (1.0, 3.0) (Node (2.0, 2.5) NullT NullT) NullT
  113. t13 = Node (1.0, 3.0) NullT (Node (2.0, 3.5) NullT NullT)
  114. t14 = Node (1.0, 3.0) NullT (Node (0.0, 3.5) NullT NullT)
  115. t15 = Node (1.0, 10.0) (Node (2.0, 9.0) NullT (Node (1.0, 15.0) NullT NullT)) NullT
  116.  
  117. t1 = Node (3.0, 10.0) (Node (5.0, 8.0) (Node (6.0, 7.0) NullT NullT)
  118. (Node (4.0, 9.0) NullT NullT))
  119. (Node (2.0, 12.0) NullT
  120. (Node (1.0, 15.0) NullT NullT))
  121.  
  122. t2 = Node (3.0, 10.0) (Node (5.0, 8.0) (Node (6.0, 7.0) NullT NullT)
  123. (Node (7.0, 9.0) NullT NullT))
  124. (Node (2.0, 12.0) NullT
  125. (Node (1.0, 15.0) NullT NullT))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement