Blame


1 3d926f58 2025-12-01 lh parse_move(['L'|Rest], N) :-
2 3d926f58 2025-12-01 lh number_chars(N0, Rest),
3 3d926f58 2025-12-01 lh N is -N0.
4 3d926f58 2025-12-01 lh
5 3d926f58 2025-12-01 lh parse_move(['R'|Rest], N) :-
6 3d926f58 2025-12-01 lh number_chars(N, Rest).
7 3d926f58 2025-12-01 lh
8 3d926f58 2025-12-01 lh parse_input(File, Moves) :-
9 3d926f58 2025-12-01 lh read_file_to_string(File, Content, []),
10 3d926f58 2025-12-01 lh split_string(Content, "\n", "", Lines0),
11 3d926f58 2025-12-01 lh exclude(=(""), Lines0, Lines),
12 3d926f58 2025-12-01 lh maplist(string_chars, Lines, CharLists),
13 3d926f58 2025-12-01 lh maplist(parse_move, CharLists, Moves).
14 3d926f58 2025-12-01 lh
15 3d926f58 2025-12-01 lh passed_zero_left(0, _, Q, Count) :- Count is Q - 1.
16 3d926f58 2025-12-01 lh passed_zero_left(_, 0, Q, Count) :- Count is Q + 1.
17 3d926f58 2025-12-01 lh passed_zero_left(_, _, Q, Q).
18 3d926f58 2025-12-01 lh
19 3d926f58 2025-12-01 lh passed_count(Move, Pos, NewPos, Q, Count) :-
20 3d926f58 2025-12-01 lh Move < 0,
21 3d926f58 2025-12-01 lh passed_zero_left(Pos, NewPos, Q, Count).
22 3d926f58 2025-12-01 lh
23 3d926f58 2025-12-01 lh passed_count(_, _, _, Q, Q).
24 3d926f58 2025-12-01 lh
25 3d926f58 2025-12-01 lh move_dial(Pos, N, NewPos, Passed0Count) :-
26 3d926f58 2025-12-01 lh T is Pos + N,
27 3d926f58 2025-12-01 lh divmod(T, 100, Q0, NewPos),
28 3d926f58 2025-12-01 lh Q is abs(Q0),
29 3d926f58 2025-12-01 lh passed_count(N, Pos, NewPos, Q, Passed0Count).
30 3d926f58 2025-12-01 lh
31 3d926f58 2025-12-01 lh solve(_, [], 0, 0).
32 3d926f58 2025-12-01 lh solve(Pos, [Move|Rest], Task1, Task2) :-
33 3d926f58 2025-12-01 lh move_dial(Pos, Move, NewPos, T2R1),
34 3d926f58 2025-12-01 lh ( NewPos =:= 0 -> T1R1 = 1 ; T1R1 = 0 ),
35 3d926f58 2025-12-01 lh solve(NewPos, Rest, T1R2, T2R2),
36 3d926f58 2025-12-01 lh Task1 is T1R1 + T1R2,
37 3d926f58 2025-12-01 lh Task2 is T2R1 + T2R2.
38 3d926f58 2025-12-01 lh
39 3d926f58 2025-12-01 lh solve(Moves, Task1, Task2) :-
40 3d926f58 2025-12-01 lh solve(50, Moves, Task1, Task2).
41 3d926f58 2025-12-01 lh
42 3d926f58 2025-12-01 lh :-
43 3d926f58 2025-12-01 lh parse_input("input/01.txt", Moves),
44 3d926f58 2025-12-01 lh solve(Moves, Task1, Task2),
45 3d926f58 2025-12-01 lh format("~d ~d~n", [Task1, Task2]).