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