summaryrefslogtreecommitdiff
path: root/6-kyu/valid-braces.hs
diff options
context:
space:
mode:
Diffstat (limited to '6-kyu/valid-braces.hs')
-rw-r--r--6-kyu/valid-braces.hs22
1 files changed, 22 insertions, 0 deletions
diff --git a/6-kyu/valid-braces.hs b/6-kyu/valid-braces.hs
new file mode 100644
index 0000000..1df6f5c
--- /dev/null
+++ b/6-kyu/valid-braces.hs
@@ -0,0 +1,22 @@
+-- https://www.codewars.com/kata/5277c8a221e209d3f6000b56
+
+module Codewars.Kata.Braces where
+
+validBraces :: String -> Bool
+validBraces xs = impl 0 0 0 xs where
+ impl cnt1 cnt2 cnt3 str =
+ if str == [] then
+ cnt1 == 0 && cnt2 == 0 && cnt3 == 0
+ else let
+ x = head str
+ xs = tail str
+ in
+ if cnt1 < 0 || cnt2 < 0 || cnt3 < 0 then
+ False
+ else if x == '(' then impl (cnt1 + 1) cnt2 cnt3 xs
+ else if x == ')' then impl (cnt1 - 1) cnt2 cnt3 xs
+ else if x == '[' then impl cnt1 (cnt2 + 1) cnt3 xs
+ else if x == ']' then impl cnt1 (cnt2 - 1) cnt3 xs
+ else if x == '{' then impl cnt1 cnt2 (cnt3 + 1) xs
+ else if x == '}' then impl cnt1 cnt2 (cnt3 - 1) xs
+ else False