aboutsummaryrefslogtreecommitdiff
path: root/codewars/6-kyu/Valid Braces
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2024-01-27 14:02:35 +0800
committerMistivia <i@mistivia.com>2024-01-27 14:02:35 +0800
commit6580dcd9127f69aaa794472ec92bc46015dc4019 (patch)
treedc2c7e102c75180f7bd98c2f3a14f8b55f83c0f2 /codewars/6-kyu/Valid Braces
init
Diffstat (limited to 'codewars/6-kyu/Valid Braces')
-rw-r--r--codewars/6-kyu/Valid Braces/solution.hs21
1 files changed, 21 insertions, 0 deletions
diff --git a/codewars/6-kyu/Valid Braces/solution.hs b/codewars/6-kyu/Valid Braces/solution.hs
new file mode 100644
index 0000000..6b139fd
--- /dev/null
+++ b/codewars/6-kyu/Valid Braces/solution.hs
@@ -0,0 +1,21 @@
+-- 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