Blame


1 d2a7af01 2025-12-11 lh parse_input(File) :-
2 d2a7af01 2025-12-11 lh read_file_to_string(File, Content, []),
3 d2a7af01 2025-12-11 lh split_string(Content, "\n", "", Lines0),
4 d2a7af01 2025-12-11 lh exclude(=(""), Lines0, Lines),
5 d2a7af01 2025-12-11 lh maplist(assert_line, Lines).
6 d2a7af01 2025-12-11 lh
7 d2a7af01 2025-12-11 lh assert_device_output(Device, Output) :-
8 d2a7af01 2025-12-11 lh assertz(device_output(Device, Output)).
9 d2a7af01 2025-12-11 lh
10 d2a7af01 2025-12-11 lh assert_line(Line) :-
11 d2a7af01 2025-12-11 lh split_string(Line, ": ", "", Parts),
12 d2a7af01 2025-12-11 lh [Device, _ | Outputs] = Parts,
13 d2a7af01 2025-12-11 lh maplist(assert_device_output(Device), Outputs).
14 d2a7af01 2025-12-11 lh
15 d2a7af01 2025-12-11 lh sum_pairs([], 0, 0).
16 d2a7af01 2025-12-11 lh sum_pairs([[A, B] | Rest], SumA, SumB) :-
17 d2a7af01 2025-12-11 lh sum_pairs(Rest, RestSumA, RestSumB),
18 d2a7af01 2025-12-11 lh SumA is RestSumA + A,
19 d2a7af01 2025-12-11 lh SumB is RestSumB + B.
20 d2a7af01 2025-12-11 lh
21 d2a7af01 2025-12-11 lh :- dynamic cached_result/4.
22 d2a7af01 2025-12-11 lh
23 d2a7af01 2025-12-11 lh paths("out", Dac/Fft, 1, Task2) :-
24 d2a7af01 2025-12-11 lh Dac == seen,
25 d2a7af01 2025-12-11 lh Fft == seen
26 d2a7af01 2025-12-11 lh -> Task2 = 1
27 d2a7af01 2025-12-11 lh ; Task2 = 0.
28 d2a7af01 2025-12-11 lh
29 d2a7af01 2025-12-11 lh paths(Current, Flags, Task1, Task2) :-
30 d2a7af01 2025-12-11 lh cached_result(Current, Flags, Task1, Task2), !.
31 d2a7af01 2025-12-11 lh
32 d2a7af01 2025-12-11 lh paths(Current, Dac/Fft, Task1, Task2) :-
33 d2a7af01 2025-12-11 lh ((Dac == seen ; Current == "dac") -> Dac1 = seen ; Dac1 = unseen),
34 d2a7af01 2025-12-11 lh ((Fft == seen ; Current == "fft") -> Fft1 = seen ; Fft1 = unseen),
35 d2a7af01 2025-12-11 lh findall([Task1, Task2], (device_output(Current, Next),
36 d2a7af01 2025-12-11 lh paths(Next, Dac1/Fft1, Task1, Task2)),
37 d2a7af01 2025-12-11 lh Pairs),
38 d2a7af01 2025-12-11 lh sum_pairs(Pairs, Task1, Task2),
39 d2a7af01 2025-12-11 lh assertz(cached_result(Current, Dac/Fft, Task1, Task2)).
40 d2a7af01 2025-12-11 lh
41 d2a7af01 2025-12-11 lh paths(Current, Task1, Task2) :-
42 d2a7af01 2025-12-11 lh paths(Current, unseen/unseen, Task1, Task2).
43 d2a7af01 2025-12-11 lh
44 d2a7af01 2025-12-11 lh :-
45 d2a7af01 2025-12-11 lh parse_input("input/11.txt"),
46 d2a7af01 2025-12-11 lh paths("you", Task1, _),
47 d2a7af01 2025-12-11 lh paths("svr", _, Task2),
48 d2a7af01 2025-12-11 lh format("~d ~d~n", [Task1, Task2]).