diff options
| author | Mistivia <i@mistivia.com> | 2025-04-24 02:46:39 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-04-24 02:46:39 +0800 |
| commit | 2a9e59907868d12a2a3ea387ec90074e26cc90c3 (patch) | |
| tree | 8bc367c09ab4e1967481fd97abf1e29a81f62b04 /6-kyu/valid-braces.hs | |
init
Diffstat (limited to '6-kyu/valid-braces.hs')
| -rw-r--r-- | 6-kyu/valid-braces.hs | 22 |
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 |
