Compare commits
2 Commits
c4c585b385
...
3024e45da7
Author | SHA1 | Date | |
---|---|---|---|
3024e45da7 | |||
464d12cea0 |
140
11/input.txt
Normal file
140
11/input.txt
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
..........................#.........................#........................................................#..............................
|
||||||
|
.............#.....................................................#.........#......................#.......................................
|
||||||
|
..................................#....................................................................................#...........#........
|
||||||
|
....................#..........................#..................................................................#.........................
|
||||||
|
.......................................................#...............................................................................#....
|
||||||
|
.....................................#.........................#......#..............#......................................................
|
||||||
|
........#...............#......................................................#..........#................................#...............#
|
||||||
|
.........................................#................#..............................................#............#.....................
|
||||||
|
....#............................#..........................................................................................................
|
||||||
|
............#......................................#..............................................#............#............................
|
||||||
|
......................#.....................................................................#...............................................
|
||||||
|
.............................................................................#........#.........................................#...........
|
||||||
|
.................#.....................................................#.................................................#..............#...
|
||||||
|
................................#....................#.................................................#....................................
|
||||||
|
.......................................#.............................................................................#......................
|
||||||
|
..#.....................#...................................................................................................................
|
||||||
|
............................................#.....................#...........#.....................#.......................................
|
||||||
|
..................................................................................................................#..................#......
|
||||||
|
....................................#....................#................................................................................#.
|
||||||
|
.........#.....................................#..............#......................#......................................#...............
|
||||||
|
..............#..........................................................#......................#.....#.....................................
|
||||||
|
.......................................................................................................................................#....
|
||||||
|
..................................................................#.........................#...................#...........................
|
||||||
|
....#............................#.....#.....................................#................................................#.............
|
||||||
|
.......................#..........................#.........................................................................................
|
||||||
|
..................................................................................#.....#...................#.............#.................
|
||||||
|
................#.............................................#.................................#...........................................
|
||||||
|
#.....................................................................................................#...................................#.
|
||||||
|
...........#..............#.....#.............#.....................................................................#.......................
|
||||||
|
...........................................................................#................#.....................................#.........
|
||||||
|
...................................................#........................................................................................
|
||||||
|
..............#....................................................................................#........................................
|
||||||
|
.....................................#................................................#.......................#.............................
|
||||||
|
.....................................................................................................................................#.....#
|
||||||
|
........#................#....................................#.................................#.........#.................................
|
||||||
|
....................................................#..............#............#....................................#......................
|
||||||
|
....#...............#........#..........................................................#.......................................#...........
|
||||||
|
..........................................#.....#.......................#..........................#.....................................#..
|
||||||
|
.......................................................#....................................................................................
|
||||||
|
#......#...................................................................................................................#................
|
||||||
|
............#...............................................................................#..........#..........................#.........
|
||||||
|
............................................................................................................#...............................
|
||||||
|
.....................................#....................#........#............................#...........................................
|
||||||
|
........................#...........................................................#................................#....................#.
|
||||||
|
......#...............................................#.....................#........................#......................................
|
||||||
|
.................................#.....................................#..................................................#.................
|
||||||
|
...................#......................#..................#..........................#.............................................#.....
|
||||||
|
.............................#.....................#..............#...........................................#.............................
|
||||||
|
.........................................................#.......................................................................#..........
|
||||||
|
...............................................................................#.......................#.................................#..
|
||||||
|
............................................................................................................................................
|
||||||
|
............................................................................................................................................
|
||||||
|
.................#.............................................................................................#.......#.............#......
|
||||||
|
....#.....#....................................................#........#...............#....................................#..............
|
||||||
|
..................................#..........#........................................................#.....................................
|
||||||
|
............................................................................................................................................
|
||||||
|
...................#..............................................................................#......................#..................
|
||||||
|
............................................................................................................................................
|
||||||
|
..#..............................................#......#.....#...........................#..............#....................#.............
|
||||||
|
................#......#.........#..........................................................................................................
|
||||||
|
.........................................................................#......................................#.........................#.
|
||||||
|
....................................................#..............#............................#...........................................
|
||||||
|
.....#....................#..........................................................................#......................................
|
||||||
|
............#...........................#......#............................................................................................
|
||||||
|
............................................................................................................................................
|
||||||
|
.....................#.........................................................#.........................#........#.............#...........
|
||||||
|
.........#..............................................................#.....................#..........................................#..
|
||||||
|
......................................#...........#.....................................#...................................................
|
||||||
|
.#...............................#..........................................................................................................
|
||||||
|
..............#............#....................................#..................................#........................#...............
|
||||||
|
.....................................................................#...........................................#..........................
|
||||||
|
............................................................................................................................................
|
||||||
|
.........#........#........................#.....#........................#.......................................................#.....#...
|
||||||
|
............................................................................................................................................
|
||||||
|
...................................#........................................................................................................
|
||||||
|
..............#..........#..............#....................................#..........#.....#.............................................
|
||||||
|
....#........................................#............#...................................................................#.............
|
||||||
|
............................................................................................................................................
|
||||||
|
#........#......................................................#........#.................................................................#
|
||||||
|
....................#.........#..........................................................................#.......#......#...................
|
||||||
|
............................................................................................................................................
|
||||||
|
.......................................#..............#...........................................#.........................................
|
||||||
|
................................................#.............................................................#.......................#.....
|
||||||
|
.......................#...................#..............................#.................................................................
|
||||||
|
...............#...................#....................................................#.............................#.....................
|
||||||
|
....#......................................................................................................#................................
|
||||||
|
.............................#.........................................#....................#.............................#.....#...........
|
||||||
|
..............................................#..................................................#...................................#......
|
||||||
|
...................#...................#..........................................#.................................#.......................
|
||||||
|
............#.....................#....................#..................#.................................................................
|
||||||
|
...........................................#........................................................#.......................................
|
||||||
|
...........................................................................................................#................................
|
||||||
|
...#............................................................#.............................................................#.............
|
||||||
|
.........................#..............................................................#................................................#..
|
||||||
|
...............#............................................................................................................................
|
||||||
|
.......................................#.......#.............#..............................................................................
|
||||||
|
.....................#...........#.............................................#............#.................#.........#...........#.......
|
||||||
|
..........................................................................#.......................#.........................................
|
||||||
|
.......#............................................................................#.......................................................
|
||||||
|
....................................................#....................................................................................#..
|
||||||
|
.................#........................................#.....#...........................................................#...............
|
||||||
|
.#.........#..................................#.................................#..............#.........#.....#......#.....................
|
||||||
|
.....................#............#.......................................................#.........#.......................................
|
||||||
|
............................................................................#.......................................................#.......
|
||||||
|
.....................................................................................#....................................#.................
|
||||||
|
............................#................................................................#..................................#...........
|
||||||
|
.....#.........................................................#............................................................................
|
||||||
|
......................#..................#............................................................................#.....................
|
||||||
|
................................................................................#.....................................................#.....
|
||||||
|
#.................................#.......................................#.................................................................
|
||||||
|
...................#......#.......................#...............#...........................................#.............................
|
||||||
|
.............................................................#........................................#......................#..............
|
||||||
|
.................................................................................................#..........................................
|
||||||
|
..#..................................#....................................................................#......#..................#.......
|
||||||
|
..........................................................#..................#........................................#.....................
|
||||||
|
..................#........#........................................................#..........................................#............
|
||||||
|
.................................#.............#.......................#...................................................................#
|
||||||
|
................................................................................................#.........................#.................
|
||||||
|
....#.....#.................................................................................................................................
|
||||||
|
.......................#....................................................#...............................................................
|
||||||
|
....................................................#.......................................................................................
|
||||||
|
.............#..............................#..........................................#....................................................
|
||||||
|
...............................#............................................................................................#........#......
|
||||||
|
.#.......................................................#.........#...........#.................................#..........................
|
||||||
|
....................................#.............#..............................................................................#..........
|
||||||
|
.....................#.........................................................................#......#.....................................
|
||||||
|
..........................#...........................#.........#.................#.........................................................
|
||||||
|
..........#.................................#................................#..............................................................
|
||||||
|
....#...........................................................................................................#..................#........
|
||||||
|
........................................................................#..............#.....................................#..............
|
||||||
|
..................#.......................................#.................................................................................
|
||||||
|
........................................................................................................................................#...
|
||||||
|
....................................................#.......................#..........................#....................................
|
||||||
|
.....#..............................#.........................#..................................#..........................................
|
||||||
|
..........................#............................................#........................................#.......#...................
|
||||||
|
..........................................#.................................................................................................
|
||||||
|
......................................................................................................................................#.....
|
||||||
|
.......#...........................................#................................#........................................#..............
|
||||||
|
#..................#..........................#..........................#.....#............................#...............................
|
||||||
|
...................................#.....................................................................................#..................
|
34
11/part1.pl
Normal file
34
11/part1.pl
Normal 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
34
11/part2.pl
Normal 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
10
11/test.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
...#......
|
||||||
|
.......#..
|
||||||
|
#.........
|
||||||
|
..........
|
||||||
|
......#...
|
||||||
|
.#........
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
.......#..
|
||||||
|
#...#.....
|
Loading…
Reference in New Issue
Block a user