diff options
| author | Mistivia <i@mistivia.com> | 2024-01-27 14:02:35 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2024-01-27 14:02:35 +0800 |
| commit | 6580dcd9127f69aaa794472ec92bc46015dc4019 (patch) | |
| tree | dc2c7e102c75180f7bd98c2f3a14f8b55f83c0f2 /codewars/6-kyu/Valid Braces | |
init
Diffstat (limited to 'codewars/6-kyu/Valid Braces')
| -rw-r--r-- | codewars/6-kyu/Valid Braces/solution.hs | 21 |
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 |
