Compare commits

..

2 Commits

Author SHA1 Message Date
3024e45da7 d11p2 2023-12-10 23:50:10 -08:00
464d12cea0 d11p1 2023-12-10 23:50:01 -08:00
2 changed files with 8 additions and 10 deletions

View File

@ -1,4 +1,3 @@
:- op(700, xfx, before).
:- table galaxy/2. :- table galaxy/2.
:- table no_galaxy_row/2. :- table no_galaxy_row/2.
:- table no_galaxy_col/2. :- table no_galaxy_col/2.
@ -7,13 +6,14 @@
start :- start :-
input('input.txt', Map), input('input.txt', Map),
findall(Dist, (galaxy(Map, A), galaxy(Map, B), A before B, findall(Dist, distance(Map, _, _, Dist), Dists),
distance(Map, A, B, Dist)),
Dists),
sum_list(Dists, Answer), sum_list(Dists, Answer),
writef('Answer=%w\n', [Answer]). writef('Answer=%w\n', [Answer]).
distance(Map, X1-Y1, X2-Y2, Dist) :- distance(Map, X1-Y1, X2-Y2, Dist) :-
galaxy(Map, X1-Y1),
galaxy(Map, X2-Y2),
(X1 < X2; X1 =:= X2, Y1 < Y2),
findall(X, no_galaxy_row(Map, X), EmptyXs), findall(X, no_galaxy_row(Map, X), EmptyXs),
findall(Y, no_galaxy_col(Map, Y), EmptyYs), findall(Y, no_galaxy_col(Map, Y), EmptyYs),
include(between(X1, X2), EmptyXs, ExpandedX), length(ExpandedX, RowsToAdd), include(between(X1, X2), EmptyXs, ExpandedX), length(ExpandedX, RowsToAdd),
@ -25,7 +25,6 @@ no_galaxy_row(Map, X) :- nth0(X, Map, Row), maplist([46]>>(true), Row).
no_galaxy_col(Map, Y) :- maplist({Y}/[Row]>>(nth0(Y, Row, 46)), Map). no_galaxy_col(Map, Y) :- maplist({Y}/[Row]>>(nth0(Y, Row, 46)), Map).
galaxy(Map, X-Y) :- nth0(X, Map, Row), nth0(Y, Row, 35). galaxy(Map, X-Y) :- nth0(X, Map, Row), nth0(Y, Row, 35).
before(X1-Y1, X2-Y2) :- X1 < X2; X1 =:= X2, Y1 < Y2.
input(FileName, Map) :- phrase_from_file(lines(Map), FileName). input(FileName, Map) :- phrase_from_file(lines(Map), FileName).
lines([]) --> eos, !. lines([]) --> eos, !.

View File

@ -1,4 +1,3 @@
:- op(700, xfx, before).
:- table galaxy/2. :- table galaxy/2.
:- table no_galaxy_row/2. :- table no_galaxy_row/2.
:- table no_galaxy_col/2. :- table no_galaxy_col/2.
@ -7,13 +6,14 @@
start :- start :-
input('input.txt', Map), input('input.txt', Map),
findall(Dist, (galaxy(Map, A), galaxy(Map, B), A before B, findall(Dist, distance(Map, _, _, Dist), Dists),
distance(Map, A, B, Dist)),
Dists),
sum_list(Dists, Answer), sum_list(Dists, Answer),
writef('Answer=%w\n', [Answer]). writef('Answer=%w\n', [Answer]).
distance(Map, X1-Y1, X2-Y2, Dist) :- distance(Map, X1-Y1, X2-Y2, Dist) :-
galaxy(Map, X1-Y1),
galaxy(Map, X2-Y2),
(X1 < X2; X1 =:= X2, Y1 < Y2),
findall(X, no_galaxy_row(Map, X), EmptyXs), findall(X, no_galaxy_row(Map, X), EmptyXs),
findall(Y, no_galaxy_col(Map, Y), EmptyYs), findall(Y, no_galaxy_col(Map, Y), EmptyYs),
include(between(X1, X2), EmptyXs, ExpandedX), length(ExpandedX, RowsToAdd), include(between(X1, X2), EmptyXs, ExpandedX), length(ExpandedX, RowsToAdd),
@ -25,7 +25,6 @@ no_galaxy_row(Map, X) :- nth0(X, Map, Row), maplist([46]>>(true), Row).
no_galaxy_col(Map, Y) :- maplist({Y}/[Row]>>(nth0(Y, Row, 46)), Map). no_galaxy_col(Map, Y) :- maplist({Y}/[Row]>>(nth0(Y, Row, 46)), Map).
galaxy(Map, X-Y) :- nth0(X, Map, Row), nth0(Y, Row, 35). galaxy(Map, X-Y) :- nth0(X, Map, Row), nth0(Y, Row, 35).
before(X1-Y1, X2-Y2) :- X1 < X2; X1 =:= X2, Y1 < Y2.
input(FileName, Map) :- phrase_from_file(lines(Map), FileName). input(FileName, Map) :- phrase_from_file(lines(Map), FileName).
lines([]) --> eos, !. lines([]) --> eos, !.