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
4 changed files with 218 additions and 0 deletions

140
11/input.txt Normal file
View File

@ -0,0 +1,140 @@
..........................#.........................#........................................................#..............................
.............#.....................................................#.........#......................#.......................................
..................................#....................................................................................#...........#........
....................#..........................#..................................................................#.........................
.......................................................#...............................................................................#....
.....................................#.........................#......#..............#......................................................
........#...............#......................................................#..........#................................#...............#
.........................................#................#..............................................#............#.....................
....#............................#..........................................................................................................
............#......................................#..............................................#............#............................
......................#.....................................................................#...............................................
.............................................................................#........#.........................................#...........
.................#.....................................................#.................................................#..............#...
................................#....................#.................................................#....................................
.......................................#.............................................................................#......................
..#.....................#...................................................................................................................
............................................#.....................#...........#.....................#.......................................
..................................................................................................................#..................#......
....................................#....................#................................................................................#.
.........#.....................................#..............#......................#......................................#...............
..............#..........................................................#......................#.....#.....................................
.......................................................................................................................................#....
..................................................................#.........................#...................#...........................
....#............................#.....#.....................................#................................................#.............
.......................#..........................#.........................................................................................
..................................................................................#.....#...................#.............#.................
................#.............................................#.................................#...........................................
#.....................................................................................................#...................................#.
...........#..............#.....#.............#.....................................................................#.......................
...........................................................................#................#.....................................#.........
...................................................#........................................................................................
..............#....................................................................................#........................................
.....................................#................................................#.......................#.............................
.....................................................................................................................................#.....#
........#................#....................................#.................................#.........#.................................
....................................................#..............#............#....................................#......................
....#...............#........#..........................................................#.......................................#...........
..........................................#.....#.......................#..........................#.....................................#..
.......................................................#....................................................................................
#......#...................................................................................................................#................
............#...............................................................................#..........#..........................#.........
............................................................................................................#...............................
.....................................#....................#........#............................#...........................................
........................#...........................................................#................................#....................#.
......#...............................................#.....................#........................#......................................
.................................#.....................................#..................................................#.................
...................#......................#..................#..........................#.............................................#.....
.............................#.....................#..............#...........................................#.............................
.........................................................#.......................................................................#..........
...............................................................................#.......................#.................................#..
............................................................................................................................................
............................................................................................................................................
.................#.............................................................................................#.......#.............#......
....#.....#....................................................#........#...............#....................................#..............
..................................#..........#........................................................#.....................................
............................................................................................................................................
...................#..............................................................................#......................#..................
............................................................................................................................................
..#..............................................#......#.....#...........................#..............#....................#.............
................#......#.........#..........................................................................................................
.........................................................................#......................................#.........................#.
....................................................#..............#............................#...........................................
.....#....................#..........................................................................#......................................
............#...........................#......#............................................................................................
............................................................................................................................................
.....................#.........................................................#.........................#........#.............#...........
.........#..............................................................#.....................#..........................................#..
......................................#...........#.....................................#...................................................
.#...............................#..........................................................................................................
..............#............#....................................#..................................#........................#...............
.....................................................................#...........................................#..........................
............................................................................................................................................
.........#........#........................#.....#........................#.......................................................#.....#...
............................................................................................................................................
...................................#........................................................................................................
..............#..........#..............#....................................#..........#.....#.............................................
....#........................................#............#...................................................................#.............
............................................................................................................................................
#........#......................................................#........#.................................................................#
....................#.........#..........................................................................#.......#......#...................
............................................................................................................................................
.......................................#..............#...........................................#.........................................
................................................#.............................................................#.......................#.....
.......................#...................#..............................#.................................................................
...............#...................#....................................................#.............................#.....................
....#......................................................................................................#................................
.............................#.........................................#....................#.............................#.....#...........
..............................................#..................................................#...................................#......
...................#...................#..........................................#.................................#.......................
............#.....................#....................#..................#.................................................................
...........................................#........................................................#.......................................
...........................................................................................................#................................
...#............................................................#.............................................................#.............
.........................#..............................................................#................................................#..
...............#............................................................................................................................
.......................................#.......#.............#..............................................................................
.....................#...........#.............................................#............#.................#.........#...........#.......
..........................................................................#.......................#.........................................
.......#............................................................................#.......................................................
....................................................#....................................................................................#..
.................#........................................#.....#...........................................................#...............
.#.........#..................................#.................................#..............#.........#.....#......#.....................
.....................#............#.......................................................#.........#.......................................
............................................................................#.......................................................#.......
.....................................................................................#....................................#.................
............................#................................................................#..................................#...........
.....#.........................................................#............................................................................
......................#..................#............................................................................#.....................
................................................................................#.....................................................#.....
#.................................#.......................................#.................................................................
...................#......#.......................#...............#...........................................#.............................
.............................................................#........................................#......................#..............
.................................................................................................#..........................................
..#..................................#....................................................................#......#..................#.......
..........................................................#..................#........................................#.....................
..................#........#........................................................#..........................................#............
.................................#.............#.......................#...................................................................#
................................................................................................#.........................#.................
....#.....#.................................................................................................................................
.......................#....................................................#...............................................................
....................................................#.......................................................................................
.............#..............................#..........................................#....................................................
...............................#............................................................................................#........#......
.#.......................................................#.........#...........#.................................#..........................
....................................#.............#..............................................................................#..........
.....................#.........................................................................#......#.....................................
..........................#...........................#.........#.................#.........................................................
..........#.................................#................................#..............................................................
....#...........................................................................................................#..................#........
........................................................................#..............#.....................................#..............
..................#.......................................#.................................................................................
........................................................................................................................................#...
....................................................#.......................#..........................#....................................
.....#..............................#.........................#..................................#..........................................
..........................#............................................#........................................#.......#...................
..........................................#.................................................................................................
......................................................................................................................................#.....
.......#...........................................#................................#........................................#..............
#..................#..........................#..........................#.....#............................#...............................
...................................#.....................................................................................#..................

34
11/part1.pl Normal file
View File

@ -0,0 +1,34 @@
:- table galaxy/2.
:- table no_galaxy_row/2.
:- table no_galaxy_col/2.
:- use_module(library(pio)).
:- initialization(start, main).
start :-
input('input.txt', Map),
findall(Dist, distance(Map, _, _, Dist), Dists),
sum_list(Dists, Answer),
writef('Answer=%w\n', [Answer]).
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(Y, no_galaxy_col(Map, Y), EmptyYs),
include(between(X1, X2), EmptyXs, ExpandedX), length(ExpandedX, RowsToAdd),
include(between(Y1, Y2), EmptyYs, ExpandedY), length(ExpandedY, ColsToAdd),
Dist is abs(X1 - X2) + abs(Y1 - Y2) + RowsToAdd + ColsToAdd.
between(End1, End2, N) :- End1 < N, N < End2; End1 > N, N > End2.
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).
galaxy(Map, X-Y) :- nth0(X, Map, Row), nth0(Y, Row, 35).
input(FileName, Map) :- phrase_from_file(lines(Map), FileName).
lines([]) --> eos, !.
lines([Line|Lines]) --> line(Line), lines(Lines).
eos([], []).
line([]) --> ( "\n" ; eos ), !.
line([L|Ls]) --> [L], line(Ls).

34
11/part2.pl Normal file
View File

@ -0,0 +1,34 @@
:- table galaxy/2.
:- table no_galaxy_row/2.
:- table no_galaxy_col/2.
:- use_module(library(pio)).
:- initialization(start, main).
start :-
input('input.txt', Map),
findall(Dist, distance(Map, _, _, Dist), Dists),
sum_list(Dists, Answer),
writef('Answer=%w\n', [Answer]).
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(Y, no_galaxy_col(Map, Y), EmptyYs),
include(between(X1, X2), EmptyXs, ExpandedX), length(ExpandedX, RowsToAdd),
include(between(Y1, Y2), EmptyYs, ExpandedY), length(ExpandedY, ColsToAdd),
Dist is abs(X1 - X2) + abs(Y1 - Y2) + RowsToAdd*999999 + ColsToAdd*999999.
between(End1, End2, N) :- End1 < N, N < End2; End1 > N, N > End2.
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).
galaxy(Map, X-Y) :- nth0(X, Map, Row), nth0(Y, Row, 35).
input(FileName, Map) :- phrase_from_file(lines(Map), FileName).
lines([]) --> eos, !.
lines([Line|Lines]) --> line(Line), lines(Lines).
eos([], []).
line([]) --> ( "\n" ; eos ), !.
line([L|Ls]) --> [L], line(Ls).

10
11/test.txt Normal file
View File

@ -0,0 +1,10 @@
...#......
.......#..
#.........
..........
......#...
.#........
.........#
..........
.......#..
#...#.....