diff --git a/exercises/practice/matching-brackets/.meta/config.json b/exercises/practice/matching-brackets/.meta/config.json index d6e72b88..daa18911 100644 --- a/exercises/practice/matching-brackets/.meta/config.json +++ b/exercises/practice/matching-brackets/.meta/config.json @@ -1,5 +1,7 @@ { - "authors": [], + "authors": [ + "erikschierboom" + ], "files": { "solution": [ "matching_brackets.pl" diff --git a/exercises/practice/matching-brackets/.meta/matching_brackets.example.pl b/exercises/practice/matching-brackets/.meta/matching_brackets.example.pl index e69de29b..a8fd00a1 100644 --- a/exercises/practice/matching-brackets/.meta/matching_brackets.example.pl +++ b/exercises/practice/matching-brackets/.meta/matching_brackets.example.pl @@ -0,0 +1,16 @@ +:- use_module(library(dcg/basics)). + +parentheses --> "(", balanced, ")". +brackets --> "[", balanced, "]". +braces --> "{", balanced, "}". + +balanced --> (parentheses | brackets | braces), balanced. +balanced --> non_bracket, balanced. +balanced --> []. + +non_bracket --> [C], { string_codes("()[]{}", Codes), \+ member(C, Codes) }. + +paired(String) :- + string_codes(String, Codes), + phrase(balanced, Codes), + !. \ No newline at end of file diff --git a/exercises/practice/matching-brackets/matching_brackets.pl b/exercises/practice/matching-brackets/matching_brackets.pl index 26046b37..d0ac4652 100644 --- a/exercises/practice/matching-brackets/matching_brackets.pl +++ b/exercises/practice/matching-brackets/matching_brackets.pl @@ -1,13 +1 @@ -paired([], []) :- !. -paired(['['|Chars], Opened) :- paired(Chars, ['['|Opened]). -paired([']'|Chars], ['['|Opened]) :- paired(Chars, Opened). -paired(['('|Chars], Opened) :- paired(Chars, ['('|Opened]). -paired([')'|Chars], ['('|Opened]) :- paired(Chars, Opened). -paired(['{'|Chars], Opened) :- paired(Chars, ['{'|Opened]). -paired(['}'|Chars], ['{'|Opened]) :- paired(Chars, Opened). -% paired([_|Chars], Opened) :- paired(Chars, Opened). - -paired(String) :- - string_chars(String, Chars), - paired(Chars, Opened), - !. +paired(String). diff --git a/exercises/practice/matching-brackets/matching_brackets_tests.plt b/exercises/practice/matching-brackets/matching_brackets_tests.plt index 30ee032f..6242c5d8 100644 --- a/exercises/practice/matching-brackets/matching_brackets_tests.plt +++ b/exercises/practice/matching-brackets/matching_brackets_tests.plt @@ -9,61 +9,61 @@ pending :- test(paired_square_brackets, condition(true)) :- paired("[]"). - test(empty_string, condition(true)) :- + test(empty_string, condition(pending)) :- paired(""). - test(unpaired_brackets, [fail, condition(true)]) :- + test(unpaired_brackets, [fail, condition(pending)]) :- paired("[["). - test(wrong_ordered_brackets, [fail, condition(true)]) :- + test(wrong_ordered_brackets, [fail, condition(pending)]) :- paired("}{"). - test(wrong_closing_bracket, [fail, condition(true)]) :- + test(wrong_closing_bracket, [fail, condition(pending)]) :- paired("{]"). - test(paired_with_whitespace, condition(true)) :- + test(paired_with_whitespace, condition(pending)) :- paired("{ }"). - test(partially_paired_brackets, [fail, condition(true)]) :- + test(partially_paired_brackets, [fail, condition(pending)]) :- paired("{[])"). - test(simple_nested_brackets, condition(true)) :- + test(simple_nested_brackets, condition(pending)) :- paired("{[]}"). - test(several_paired_brackets, condition(true)) :- + test(several_paired_brackets, condition(pending)) :- paired("{}[]"). - test(paired_and_nested_brackets, condition(true)) :- + test(paired_and_nested_brackets, condition(pending)) :- paired("([{}({}[])])"). - test(unopened_closing_brackets, [fail, condition(true)]) :- + test(unopened_closing_brackets, [fail, condition(pending)]) :- paired("{[)][]}"). - test(unpaired_and_nested_brackets, [fail, condition(true)]) :- + test(unpaired_and_nested_brackets, [fail, condition(pending)]) :- paired("([{])"). - test(paired_and_wrong_nested_brackets, [fail, condition(true)]) :- + test(paired_and_wrong_nested_brackets, [fail, condition(pending)]) :- paired("[({]})"). - test(paired_and_wrong_nested_brackets_but_innermost_are_correct, [fail, condition(true)]) :- + test(paired_and_wrong_nested_brackets_but_innermost_are_correct, [fail, condition(pending)]) :- paired("[({}])"). - test(paired_and_incomplete_brackets, [fail, condition(true)]) :- + test(paired_and_incomplete_brackets, [fail, condition(pending)]) :- paired("{}["). - test(too_many_closing_brackets, [fail, condition(true)]) :- + test(too_many_closing_brackets, [fail, condition(pending)]) :- paired("[]]"). - test(early_unexpected_brackets, [fail, condition(true)]) :- + test(early_unexpected_brackets, [fail, condition(pending)]) :- paired(")()"). - test(early_mismatched_brackets, [fail, condition(true)]) :- + test(early_mismatched_brackets, [fail, condition(pending)]) :- paired("{)()"). - test(math_expression, condition(true)) :- + test(math_expression, condition(pending)) :- paired("(((185 + 223.85) * 15) - 543)/2"). - test(complex_latex_expression, condition(true)) :- - paired("\\left(\\begin{array}{cc} \\frac{1}{3} & x\\\\ \\mathrm{e}^{x} &... x^2 \\end{array}\\right)") + test(complex_latex_expression, condition(pending)) :- + paired("\\left(\\begin{array}{cc} \\frac{1}{3} & x\\\\ \\mathrm{e}^{x} &... x^2 \\end{array}\\right)"). :- end_tests(matching_brackets).