aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2025-11-11 13:49:26 +0000
committerGitHub <noreply@github.com>2025-11-11 13:49:26 +0000
commit2b98e6b19e592e33ad84c2e3600f882235ec545d (patch)
tree53310b9ce2622fee88e54bbd7f7d0b64bcfbeaac
parentf1cf219ec2a08a70642e8d768b99a838d4ef09ad (diff)
parentd71bc022962d95241cb118ef2f235a48c8cf01e3 (diff)
downloadperlweeklychallenge-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.p27
-rw-r--r--challenge-346/2colours/prolog/ch-2.p18
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).