Guest User

Not Quite Lisp

a guest
Dec 5th, 2015
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import Data.List;
  2. import Data.Maybe;
  3. import Text.Printf;
  4.  
  5. parenToOffset :: Char -> Int
  6. parenToOffset '(' = 1
  7. parenToOffset ')' = -1
  8. parenToOffset _   = 0
  9.  
  10. toCurrentLevel :: [Int] -> [Int]
  11. toCurrentLevel = reverse . go [0]
  12.   where
  13.     go :: [Int] -> [Int] -> [Int]
  14.     go acc     []     = acc
  15.     go []      xs     = go [0] xs
  16.     go (a:acc) (x:xs) = go (a + x : acc) xs
  17.  
  18. levelsAtIndex :: String -> [Int]
  19. levelsAtIndex = toCurrentLevel . fmap parenToOffset
  20.  
  21. main :: IO ()
  22. main = do
  23.     contents <- getContents
  24.     let levels = levelsAtIndex contents
  25.     printf "Task 1: %d\n" $ last levels
  26.     printf "Task 2: %d\n" $ fromMaybe (-1) $ elemIndex (-1) levels
Advertisement
Add Comment
Please, Sign In to add comment