Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.57 KB | None | 0 0
  1. import Data.Char
  2.  
  3. cPred False x = x
  4. cPred True x = chr (pred (ord x))
  5.  
  6. f c (k, r) [] = r
  7. f c (k, r) [x] = case cPred c x of
  8. '0' -> r
  9. x' -> x' : r
  10. f c (k, r) (x_:y:xys)
  11. | x >= y = f False (1+k, x : r) (y:xys)
  12. | x < y = f True (1+k, (replicate (1+k) '9')) (y:xys)
  13. where x = case cPred c x_ of
  14. '/' -> '9'
  15. x1 -> x1
  16.  
  17. g = f False (0, []) . reverse
  18.  
  19. pr = putStr . foldr p1 "" . zip [1..]
  20. where p1 (k, r) = showString "Case #" . shows k . showString ": " . showString r . showString "\n"
  21.  
  22. process = pr . map g . tail . lines
  23.  
  24. main = getContents >>= process
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement