From 7e9006d11542171357ec40ec42ed03919978ef98 Mon Sep 17 00:00:00 2001 From: Márton Polgár <37218286+2colours@users.noreply.github.com> Date: Tue, 11 Nov 2025 03:37:37 +0100 Subject: Create ch-1.p --- challenge-346/2colours/prolog/ch-1.p | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 challenge-346/2colours/prolog/ch-1.p 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). -- cgit From d71bc022962d95241cb118ef2f235a48c8cf01e3 Mon Sep 17 00:00:00 2001 From: Márton Polgár <37218286+2colours@users.noreply.github.com> Date: Tue, 11 Nov 2025 03:38:53 +0100 Subject: Create ch-2.p --- challenge-346/2colours/prolog/ch-2.p | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 challenge-346/2colours/prolog/ch-2.p 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). -- cgit