2 read_file_to_string(File, Content, []),
3 split_string(Content, "\n", "", Lines0),
4 exclude(=(""), Lines0, Lines),
6 numlist(1, Length, Ys),
7 maplist(assert_line, Lines, Ys).
9 assert_line(Line, Y) :-
10 string_chars(Line, Chars),
11 assert_chars(Chars, 1, Y).
13 assert_chars([], _, _).
14 assert_chars([C|Rest], X, Y) :-
15 assert_field(C, X, Y),
17 assert_chars(Rest, X2, Y).
19 assert_field('@', X, Y) :-
21 assert_field(_, _, _).
23 forklift_access(X, Y) :-
25 neighbour_count(X, Y, N),
28 neighbour_offset(DX, DY) :-
33 has_neighbour(X, Y, DX, DY) :-
34 neighbour_offset(DX, DY),
39 neighbour_count(X, Y, N) :-
40 aggregate_all(count, has_neighbour(X, Y, _, _), N).
43 aggregate_all(count, forklift_access(_, _), N).
46 findall(roll(X, Y), forklift_access(X, Y), List),
47 maplist(retract, List),
59 parse_input("input/04.txt"),
62 format("~d ~d~n", [Task1, Task2]).