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