diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2025-11-11 13:49:26 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-11 13:49:26 +0000 |
| commit | 2b98e6b19e592e33ad84c2e3600f882235ec545d (patch) | |
| tree | 53310b9ce2622fee88e54bbd7f7d0b64bcfbeaac | |
| parent | f1cf219ec2a08a70642e8d768b99a838d4ef09ad (diff) | |
| parent | d71bc022962d95241cb118ef2f235a48c8cf01e3 (diff) | |
| download | perlweeklychallenge-club-2b98e6b19e592e33ad84c2e3600f882235ec545d.tar.gz perlweeklychallenge-club-2b98e6b19e592e33ad84c2e3600f882235ec545d.tar.bz2 perlweeklychallenge-club-2b98e6b19e592e33ad84c2e3600f882235ec545d.zip | |
Merge pull request #13014 from 2colours/branch-for-challenge-346
Branch for challenge 346
| -rw-r--r-- | challenge-346/2colours/prolog/ch-1.p | 27 | ||||
| -rw-r--r-- | challenge-346/2colours/prolog/ch-2.p | 18 |
2 files changed, 45 insertions, 0 deletions
diff --git a/challenge-346/2colours/prolog/ch-1.p b/challenge-346/2colours/prolog/ch-1.p new file mode 100644 index 0000000000..5f965bed84 --- /dev/null +++ b/challenge-346/2colours/prolog/ch-1.p @@ -0,0 +1,27 @@ +:- use_module(library(dcg/basics)). + +paren_compositions_min1 --> paren_composition, paren_compositions. + +paren_compositions --> paren_compositions_min1. +paren_compositions --> []. + +paren_composition --> `(`, paren_compositions, `)`. + +candidate_length(Str, L) :- + string_length(Str, Str_Len), + candidate_length(Str, Str_Len, L). + +candidate_length(Str, Str_L, C_L) :- + string_codes(Str, Str_Codes), + phrase((string(Prefix), paren_compositions_min1), Str_Codes, Postfix), + length(Postfix, Rem_L), + ( + length(Prefix, Skipped_L), + C_L is Str_L - Rem_L - Skipped_L + ; + candidate_length(Postfix, Rem_L, C_L) + ). + + + +task(Str, Result) :- findall(L, candidate_length(Str, L), Ls), max_list(Ls, Result). diff --git a/challenge-346/2colours/prolog/ch-2.p b/challenge-346/2colours/prolog/ch-2.p new file mode 100644 index 0000000000..7afa2f7d2f --- /dev/null +++ b/challenge-346/2colours/prolog/ch-2.p @@ -0,0 +1,18 @@ +:- use_module(library(dcg/basics)). +:- use_module(library(dcg/high_order)). + + +operator --> `*`. +operator --> `+`. +operator --> `-`. +operator --> ``. + +good_expression(Str, Target, Expression) :- + string_codes(Str, Str_Codes), + phrase(sequence(digit, operator, Str_Codes), Expression_Codes), + string_codes(Expression, Expression_Codes), + read_term_from_atom(Expression, Term, []), + Term =:= Target. + + +task(Str, Target, Expressions) :- findall(Expression, good_expression(Str, Target, Expression), Expressions). |
