d21p1
This commit is contained in:
parent
63921cea50
commit
9189483484
131
21/input.txt
Normal file
131
21/input.txt
Normal file
@ -0,0 +1,131 @@
|
||||
...................................................................................................................................
|
||||
.#....................#..#......##.#..#.#..#.#..#.#.........#....................##......##...#....#.....#..#.....#........#.......
|
||||
.........#......#.#.........#...#.#...##..#.......#..#...................#........#..........#.#..##...#...#.......................
|
||||
..#...#...#..#..#.#..#......#.....#...#....##..............................#......#.....#........#.......#.#.......#..#......#.....
|
||||
............#................#...#.............#.........................#..................#....#..............#......##..#.......
|
||||
.##....#...#....#............#.#..................#.#...#.................#......#.....#..........#.....#.#.#...........#..........
|
||||
..###....#.#.#....#....##............##.#...#...............................#.#..#.#.........#....................#.#....###.#.....
|
||||
..#....##.......#...##..#......#.....................#..........#...#............#.........#.........##......#......#..#......#....
|
||||
....................#......##.............#.#.................................#.....#..#.#..#....#...##........#....#..............
|
||||
................#...........#.#.....#.#....#.................#.....#...................#..............#....#..#......#......#......
|
||||
.....#.....#...........#.............#.##......#.#..............#................#........#..#..#....#....#....#.#..........#.#....
|
||||
..#......#..........#.............#..........#...#.................#.##..................#.##.....#......##.......#...#.........##.
|
||||
.......#..#..#.......#.......#...##.#....#.....#...........#...#....#..#..............#.............#......#..#....................
|
||||
..#..#.........#.......#...#..............#.............#......#....#...................#..........##.....##.##.....#.....#.#......
|
||||
.....#....###....#......#..#..#..#........#..#............#.....#.....#.#.#..................#.......#...........##................
|
||||
.........#....#.....#...........#..##..##.......................#..#.......#.............#....##...##...#...#...##........#...#....
|
||||
.#...#..#.....#.......#.#......#.......#.#.............#..#.#.....#.#.#......#.........#.........#...........#..#.....##....#......
|
||||
.....#.#.#...............#...........###.#..............#.#..#......#...................#...#....##.........#..#..#.#...#.#........
|
||||
......#..........#....##.....#.......#.....#..........#......###....#.......#...........#......#..............#.........#..#.#.....
|
||||
...#......#............#............#.#..#........#.....#.......#..............#.............#.........#...........#...............
|
||||
..............##........#.##..#....................#.......#...............#...#.............#...#..##.........#.......#.........#.
|
||||
..........##....#..#.........#...#..............#.....##..#.....................#...........##.......................#...........#.
|
||||
......#..........##..............#...................#...#..#.....#.....#.......#...............#.........#..#......#........#.....
|
||||
....#.#.............#.....#...#.....#.#........#.#...#...###..#........#..#...#.............#.........#.....................##.....
|
||||
....#...#.........#..............#..............#.......####.........#..............##...........###.......#.....#........##..#..#.
|
||||
..#...#...........#.#...#...#...............................#............#....................#...#....#..#...#.#...........#..#...
|
||||
..#.....##..#.#.........................................#.........#....#......#....#..#....................#.#........#..........#.
|
||||
..#...#..#...#......#.#.......#...............#.#......##..#..#.........#.............#......................#....##...##.#........
|
||||
...#.#.#..............#...##..............#...#............#...............#...........#.#.........#..#.......#.#.#...........#....
|
||||
............#.....#....#.....##...............#......#..........#.....#........#........#..............#...#.#.....#.#.............
|
||||
............#........##.................#......#...............................#.#.#................#...#.................#..#.....
|
||||
......#...#....#............#.........#.......#....#...................#........#..........#...............#...........#...........
|
||||
........#............#......##.......#...........#.......#.............#.....................................#...........#.........
|
||||
..........#.....#.........#.#.......................#..........##.........#....#........#.....#..........##..................##....
|
||||
..........#........................#.............#.......##..#......#..........#...........#.............#....#..#..#....#......#..
|
||||
......#........#........#.........#.......#....#..................#.........##.....#......#....................#...#.........#.....
|
||||
...#..#....#....#.................#...#.....#.....##....................#.......##.....#...#...##.......................##.....#...
|
||||
...##........#.....................#.........#..##....#.................###........#.......#..............#...#...#.......#....##..
|
||||
.......#...........##.............#......##.............##.##........##...#..#..#.#.......#..#.#...........#...#...................
|
||||
.........#.......##.............#............##.....#........#...............#.#.....#.....#.#..............#.......##...#.........
|
||||
.......##...#....#...........#...........#..............#..#..#.........####..........#....##.................#..............#.....
|
||||
....#..........................#..........#.............#..........#...#...........#.......#............................##.........
|
||||
...#...#.....###.................................##...............................#....#...#..##.................................#.
|
||||
..#....#.#......#............#...#......##.....#.....#..##...#.........#.....#.............#......#...#............#...............
|
||||
......#.....#.##................#.......##.##........#.........................#..............................................#....
|
||||
.#....#..................#.#...............#..#......##.......##...............#....####..........#...#........................#...
|
||||
...#........#..........#.................#....#.........#....#.....#.........#.....#.#.......##.......#................#..##.......
|
||||
.#.......#.#..#............##...........#......#.#.......................#.........#.....#.....#.....###...............#.#..##.....
|
||||
.......................#...#...........#.........#....###.......................#.........###.#.#....#......#........##............
|
||||
..#....................#.................#.#.##.#........#..#......#....#......##......#............#..#..............#....#....#..
|
||||
.......................##.##.#..#.....###....#..#.#...#............#........#.....#....#.#.....#..#....#......................##...
|
||||
....#.....#.........##..#....#..#.........#...#...#..##........#......###.....#..................#......................#..........
|
||||
.#.#................#..#.#...#........................#....##..#.............#...#.#.......#........#.#.....##................#....
|
||||
.##..#..........#..#.#........##............#.......#..........#....#.#...#....##.#...#..##...........#.......................#....
|
||||
.#.#.##..................#............#.#......#.........#............#.#....#..#.........##..#..................##...........##.#.
|
||||
..............#..........#...#...##..........#.....................#..#..............#.....#.#...........#.....#....#.......#......
|
||||
..###.........#........###...#...........#..##.##..###....#...#................#.....#......#...##...................#...........#.
|
||||
..#...........#.................##........#.........#...#.....##......##...#.........#......#.............#...#..#.................
|
||||
..#.............#..........#.#.............#.....#............#....#.#......#....................#.#.......#.#.....#............##.
|
||||
..........#...........#...#...#...#................#......#................#..........................##.##.....#..#..#.#..........
|
||||
..............#....#......#............#.....#.......#..#..........................#..#...............................#............
|
||||
............#.............#...........##...#.##..#.........#....#.....#..#.....#...............##....#.................#...........
|
||||
...........#.....#.##..............#....#..........#......#.......#..##....##.......#.........#.......#....#...#..........#........
|
||||
......#...#...#..............#.#...##.#..#........#.....#.......#...#.........#.....#.....##.........#.#...........................
|
||||
..............#..#........#......##.......#......#...#.#........#.............#...##.............#.#.#...............##....#.......
|
||||
.................................................................S.................................................................
|
||||
.........#.....#.#.#..........#.#.............#..#.....................##......##.#.............#.#.......#.........#...#..........
|
||||
.........#......#......#......#..........#...........................#...#......#..........#..#.#..........#......#..#..#...#......
|
||||
........#.#...............##...............................#.#..............#.#....##..#...#...#....#..#.................#.........
|
||||
.............#..#....#............#........#.#......#........#.......#....#......#...#.#..........#....##......#.#.................
|
||||
............#..........#.............#.#..............#.....#.....#...#...#........#.#........#.#........#.#.......................
|
||||
.................#........#......#....#.#................#..............#.....#.#.....#.............#.#........#.#...#.............
|
||||
...........#....#.##...........#..#...................................#.#...#........#.......#.........#...#..##..##...............
|
||||
.....................#.#..#...#.#..........#....##...#.................#...............#.......................#...................
|
||||
..............#..#.............#.#...........#....#.......#.........#.......#.........#...#.#.........##............#..............
|
||||
....#.............##....#......#..........................##.........#.#.........#.....#...#..............#........................
|
||||
....#............#...........#.####....#...#.......#..#.........#...#.............#...........#...#...........#.##...........#.#...
|
||||
..##..............#...............#...#.#..#....##.....................#..#.....#.............#....#.......#..###.............##.#.
|
||||
.....#.##........#....#...##.#..###...#......#..##.#.....#..#.#.#........##......#............#.......#.....#....#...........##....
|
||||
.#......................#.#.......#........#.#.#.........##.....#.....#..#........#..#..#...#..##.......#...............#..........
|
||||
.....#...#.............................#.....#.....#......##......#...##........#.#.........................###.........#..........
|
||||
...#........#...................#....#...........#..#....#...#.........#...........##.#..#..#..#...........##............#.........
|
||||
......##..#..........##..#..#...........#......#...#........#.....#........#...........#........#............#........#.......#....
|
||||
.......#.......................#....#......###..#..#..#.........#.##..#................#.....#...............................#.....
|
||||
...#.........#............................................#...#....#...........#.#..................#.....##.......#...#........#..
|
||||
..##..###.......#........#................#.....#..................##.........#..#..#...........#..##...###.........###...#...#....
|
||||
..........#.....#.............#.#..#.#...........##.........#..............................#..#.......#.#................#.#.#.....
|
||||
.......#..................#............##.............#..............#.#........#.#..............#...#..........................#..
|
||||
...#.......#.....#..........................#...#...#...........#..#.............#.........#..........#.............#........#.....
|
||||
..............#................##......#.#......#........................####...#.....#....#....#..................#.#.#........#..
|
||||
........#.....#.#....#....................##......................................#...#..#.......#..........................##.....
|
||||
...#.#.........#.#..#.............#...#....##.......#......................##...#.#.........#.....#..........#.....................
|
||||
..#.#......#...#......##............#......#....#.#..#.#..........#....#......##..#................................#...............
|
||||
........###..##....##...........................#.#.#.##..###........#....#............#........##.........#...#...................
|
||||
....#............................#.#.........#.........#...#.......#.................#..#......#.........#..#.....#...#.#....#...#.
|
||||
..#.#..........#..........#.........#..#...#..........#.....#....................#.#..#.......#...........#............#...........
|
||||
.......#.....#...........##.........#.....#..........#....#..#......#...........#...##....#......................#....#.......#....
|
||||
..##......#...##.............................##..........#....#..............#..........#..............##..#....##.#........##.....
|
||||
....#......#....#.#..................#..........#....#.#..##.#.##........#.............................#...............#.......#.#.
|
||||
.............#..#......#.................#.#..#....####........#......#......#....#.#.....................#.#.#.#..#...............
|
||||
.##......#........##........#.............#.#.###.....#.............#.......#..##....#...#....................##..###.......#......
|
||||
....#.#......##.#.......#......#......................#.......#.........#..#...........#................#.........#..#...#....#....
|
||||
..........#....#..#...........#.................#...#..#.....................#.#........##.......#.#....#..#................##...#.
|
||||
......#....#.......#.......#..#...........#......#............#......#................#..........#...#.......##...#....#.#.........
|
||||
...#..##...##....#..#.......#....#.................#.#.....#....#........#..#.....####.#...........#..#............#...#..##.....#.
|
||||
..#......#...................#...............................#............#.....##.............#..#...#..##.#......#...............
|
||||
....#.........#.........#..............................#...#....#..#.#..............#...............#..##.........#.......#....#...
|
||||
.....#.........#....#.............#............................#.................##............#...#......#..........#.....#.....#.
|
||||
...#.#....#.......##...#....#............................##.#...#.......#...##...................#..........#.#....................
|
||||
...........#..#.###.....##...#.........#...........#..#.#.........#.#.#.......#.................#....#............###.........#..#.
|
||||
.##..........#..#......#.....##.##.#...##.........#.................#....#.#.....#.................#.....#...#....#.....###..#.#...
|
||||
......#.#..##.#.......#...#..#........................#..#..........#.#....#..##........#...#.#.............#.#....................
|
||||
.......#.#.............#..#.........................#.##..........##......................#...##.........#....#..........#..###....
|
||||
...............#..#...#.........#.........#.................#.#......#....................#.........#.......................#.#....
|
||||
.....#.................#.#...............##............................####...................##....#......#.#....##..#..#.......#.
|
||||
....#..#.......#.#...#.......................##.........#..#.......#.#.#............#...........#.###............#......#...##.....
|
||||
..#.#..........#..#.......#...#.........#....#.........#....#...#.......#.#..........##..##........................#..........##...
|
||||
....#...##......##......#.......#....###..............................#.##........................#......##.......#............#...
|
||||
...........#......#.#......#.............................#..........#...............#......##...............#.#........###.......#.
|
||||
..............#......#.....#.........#.....##....#..................#..##.......#.........##.#..##..................#....#.........
|
||||
....#...#...##.......###.......#....#...........#.#.............#...#.............#.#...#.#..................#..#.........#........
|
||||
................#.........#....#....#.##.....#...###..........#.......#...........#..#....#.............#....................##....
|
||||
.......................##..............#...#.#....##.#............#.#........#......##....#.......#........#.#.......#....#..#..#..
|
||||
..#....#..#............#.#...................#.....................................#.......##.#............##..#........#..........
|
||||
.....#............#.......##.........##...#........#........................................#................#.......#..........#..
|
||||
......#.#.....#.......#............##......#.#..#....#.........................#...............#..#.......##....###......###.......
|
||||
..#...................#.#...#.....#.......#..................................#..#....#......#.#...#..#..#......#.#.#....#....#.....
|
||||
...#....#....#.....#.....#.............................#.##..............#.....#..#.........#...#.....#........#.......#......##...
|
||||
.....#.......#.....#...#..#....#................#.......................#..#...#........#..........#....#..#....................#..
|
||||
......#.............#.#...#.##.......#...#.....#.....#.#.#...............#.....##.#....#...............................#.#.....#...
|
||||
...................................................................................................................................
|
47
21/part1.pl
Normal file
47
21/part1.pl
Normal file
@ -0,0 +1,47 @@
|
||||
:- use_module(library(pio)).
|
||||
:- use_module(library(dcg/basics)).
|
||||
:- initialization(main, main).
|
||||
|
||||
main([FileName|_]) :-
|
||||
input(FileName, Map, Starting),
|
||||
nsteps(Map, 64, [Starting], Ends), length(Ends, Answer),
|
||||
write(Answer), nl.
|
||||
|
||||
nsteps(Map, N, Starts, Reachables) :-
|
||||
length(Range, N),
|
||||
foldl({Map}/[_, SIn, SOut]>>(step(Map, SIn, SOut)), Range, Starts, Reachables).
|
||||
|
||||
step(Map, CurrentCells, NextCells) :-
|
||||
maplist(neighbors(Map), CurrentCells, NeighborsOfCells),
|
||||
foldl(
|
||||
[Neighbors, SetIn, SetOut]>>(
|
||||
list_to_ord_set(Neighbors, NeighborsSet),
|
||||
ord_union(SetIn, NeighborsSet, SetOut)),
|
||||
NeighborsOfCells, [], NextCells).
|
||||
|
||||
neighbors(Map, X-Y, Neighbors) :-
|
||||
findall(X1-Y1, neighbor(Map, X-Y, X1-Y1), Neighbors).
|
||||
|
||||
neighbor(Map, X-Y, X1-Y1) :-
|
||||
( X1 is X, Y1 is Y+1; X1 is X, Y1 is Y-1;
|
||||
X1 is X+1, Y1 is Y; X1 is X-1, Y1 is Y ),
|
||||
nth0(X1, Map, Row), nth0(Y1, Row, '.').
|
||||
|
||||
replace(I, List, E, NewList) :- nth0(I, List, _, R), nth0(I, NewList, E, R).
|
||||
|
||||
% input parsing stuff below
|
||||
input(FileName, Map, StartX-StartY) :-
|
||||
phrase_from_file(lines(MapS), FileName),
|
||||
nth0(StartX, MapS, Row), nth0(StartY, Row, s),
|
||||
select(s, Row, '.', NewRow), replace(StartX, MapS, NewRow, Map).
|
||||
|
||||
lines([]) --> eos, !.
|
||||
lines([Line|Lines]) --> line(Line), lines(Lines).
|
||||
|
||||
line([]) --> "\n"; eos.
|
||||
line([s|Chars]) --> "S", line(Chars).
|
||||
line(['.'|Chars]) --> ".", line(Chars).
|
||||
line(['#'|Chars]) --> "#", line(Chars).
|
||||
|
||||
% Debug stuff
|
||||
print(Map) :- maplist([X]>>(atomics_to_string(X, XStr), write(XStr), nl), Map).
|
11
21/test.txt
Normal file
11
21/test.txt
Normal file
@ -0,0 +1,11 @@
|
||||
...........
|
||||
.....###.#.
|
||||
.###.##..#.
|
||||
..#.#...#..
|
||||
....#.#....
|
||||
.##..S####.
|
||||
.##..#...#.
|
||||
.......##..
|
||||
.##.#.####.
|
||||
.##..##.##.
|
||||
...........
|
Loading…
Reference in New Issue
Block a user