diff --git a/9_alt.hs b/9_alt.hs new file mode 100644 index 0000000..8d6c734 --- /dev/null +++ b/9_alt.hs @@ -0,0 +1,16 @@ +scoreAndCount :: String -> (Int, Int) +scoreAndCount str = + let (_, _, _, score, count) = foldl f (False, False, 1, 0, 0) str + in (score, count) + where f (isCancel, isGarbage, level, score, count) curr + | isCancel = (False, isGarbage, level, score, count) + | isGarbage = (curr == '!', curr /= '>', level, score, count + (fromEnum $ curr /= '>' && curr /= '!')) + | curr == '{' = (False, False, level + 1, score + level, count) + | curr == '}' = (False, False, level - 1, score, count) + | curr == ',' = (False, False, level, score, count) + | curr == '<' = (False, True, level, score, count) + +main :: IO () +main = do + input <- readFile "9.txt" + print $ scoreAndCount input \ No newline at end of file