Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Task where
- calc :: [Char] -> IO()
- calc x = putStr (machine "" x "" 0 0 1)
- machine :: [Char] -> [Char] -> [Char] -> Int -> Int -> Int -> [Char]
- machine answer (x:xs) subline state start current = case state of
- 0 -> case x of
- '+' -> next answer "+" 6 current
- _ -> next answer "" 0 0
- 1 -> case x of
- 'a' -> next answer (subline ++ "a") 2 start
- 'b' -> next answer (subline ++ "b") 3 start
- 'c' -> next answer (subline ++ "c") 4 start
- '+' -> next answer "+" 1 current
- _ -> next answer "" 0 0
- 2 -> case x of
- 'a' -> next answer (subline ++ "a") 2 start
- '-' -> next answer (subline ++ "-") 1 start
- '+' -> next log "+" 5 current
- _ -> next answer "" 0 0
- 3 -> case x of
- 'b' -> next answer (subline ++ "b") 3 start
- '-' -> next answer (subline ++ "-") 1 start
- '+' -> next log "+" 5 current
- _ -> next answer "" 0 0
- 4 -> case x of
- 'c' -> next answer (subline ++ "c") 4 start
- '-' -> next answer (subline ++ "-") 1 start
- '+' -> next log "+" 5 current
- _ -> next answer "" 0 0
- 5 -> case x of
- 'a' -> next answer (subline ++ "a") 2 start
- 'b' -> next answer (subline ++ "b") 3 start
- 'c' -> next answer (subline ++ "c") 4 start
- '+' -> next log "+" 5 current
- _ -> next answer "" 0 0
- 6 -> case x of
- 'a' -> next answer (subline ++ "a") 2 start
- 'b' -> next answer (subline ++ "b") 3 start
- 'c' -> next answer (subline ++ "c") 4 start
- '+' -> next log "+" 5 current
- _ -> next answer "" 0 0
- _ -> "error"
- where next a b c d = case xs of
- [] -> a
- _ -> machine a xs b c d (current + 1)
- log = answer ++ show start ++ "::" ++ show current ++ " " ++ subline ++ "+" ++ ['\n']
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement