From a003999f4a451fc878ebc6bbc224620df32003e4 Mon Sep 17 00:00:00 2001 From: tbuckworth <elkilesh@hotmail.co.uk> Date: Mon, 11 Nov 2024 16:02:23 +0000 Subject: [PATCH] improving efficiency --- prolog/solution_1.pl | 93 ++++++++++++++++++++++++++++++++------------ 1 file changed, 68 insertions(+), 25 deletions(-) diff --git a/prolog/solution_1.pl b/prolog/solution_1.pl index a5e7ece..0191bb0 100644 --- a/prolog/solution_1.pl +++ b/prolog/solution_1.pl @@ -3,19 +3,26 @@ all_rows(Rs):- setof(R, C^Colour^input_colour(R,C,Colour), Rs). +all_cols(Cs):- + setof(C, R^Colour^input_colour(R,C,Colour), Cs). + + + + row(R):- all_rows(Rs), member(R,Rs). column(C):- - input_colour(_,C,_). + all_cols(Cs), + member(C,Cs). nrow(NR):- all_rows(Rs), length(Rs, NR). ncol(NC):- - setof(C, R^Colour^input_colour(R,C,Colour), Cs), + all_cols(Cs), length(Cs, NC). vertical_colour(C,Colour):- @@ -24,22 +31,20 @@ vertical_colour(C,Colour):- Colour \= black. vertical_colour(C,Colour):- - nrow(NR), - input_colour(NR,C,Colour), + row(R), + input_colour(R,C,Colour), Colour \= black. - horizontal_colour(R,Colour):- input_colour(R,C,Colour), C is 0, Colour \= black. horizontal_colour(R,Colour):- - ncol(NC), - input_colour(R,NC,Colour), + column(C), + input_colour(R,C,Colour), Colour \= black. - horizontal_diff(N):- horizontal_colour(R,_), horizontal_colour(R2,_), @@ -52,29 +57,67 @@ vertical_diff(N):- C2 > C, N is C2 - C. -remainder(N,D,R):- - integer(X), - R is N - X * D. - -output_colour(_,C,Colour):- - vertical_colour(Cstart,Colour), - column(C), +output_colour(R,C,Colour):- + vertical_colour(Cstart, Colour), vertical_diff(VD), + column(C), + row(R), C >= Cstart, - VDtwo is 2 * VD, - remainder(C-Cstart, VDtwo, R), - R == 0. + 0 is ((C-Cstart) rem (2 * VD)). -output_colour(R,_,Colour):- +output_colour(R,C,Colour):- horizontal_colour(Rstart, Colour), - row(R), horizontal_diff(VD), + row(R), + column(C), R >= Rstart, - VDtwo is 2 * VD, - remainder(R-Rstart, VDtwo, Rem), - Rem == 0. + 0 is ((R-Rstart) rem (2 * VD)). + + +output_colour(R,C,black):- + \+ output_colour(R,C,_). + +%set_prolog_flag(print_length, infinite). +%setof([R,C,Colour], R^C^Colour^output_colour(R,C,Colour), Cs). + + +%written:- +% output_colour(R,C,Colour), +% write({"output_colour("+R+","+C+","+Colour+").\n"}). + +forall(P, Q):- + \+ (P, \+ Q). + +print_forall :- + forall(output_colour(R, C, Colour), + (write('output_colour('), + write(R), write(', '), + write(C), write(', '), + write(Colour), write(').'), + nl)). + +print_setof :- + setof((R, C, Colour), R^C^Colour^output_colour(R, C, Colour), Results), + print_results(Results). + +print_results([]). +print_results([(R, C, Colour) | Rest]) :- + write('output_colour('), + write(R), write(', '), + write(C), write(', '), + write(Colour), write(').'), nl, + print_results(Rest). + + + + + + + + + + + -%output_colour(R,C,black):- -% \+ output_colour(R,C,_). -- GitLab