commit 3d926f58b1a1f42fc4a7d3f34c8cde8aefb5b92f from: Lukas Henkel date: Mon Dec 01 16:26:58 2025 UTC Day 1 commit - /dev/null commit + 3d926f58b1a1f42fc4a7d3f34c8cde8aefb5b92f blob - /dev/null blob + 770eab4480baef65fb31c2348f2cc7de6aba70be (mode 644) --- /dev/null +++ .gitignore @@ -0,0 +1 @@ +input \ No newline at end of file blob - /dev/null blob + 5c84ea195af91262a033c2fcbfce75c84f719b26 (mode 644) --- /dev/null +++ 01.pl @@ -0,0 +1,45 @@ +parse_move(['L'|Rest], N) :- + number_chars(N0, Rest), + N is -N0. + +parse_move(['R'|Rest], N) :- + number_chars(N, Rest). + +parse_input(File, Moves) :- + read_file_to_string(File, Content, []), + split_string(Content, "\n", "", Lines0), + exclude(=(""), Lines0, Lines), + maplist(string_chars, Lines, CharLists), + maplist(parse_move, CharLists, Moves). + +passed_zero_left(0, _, Q, Count) :- Count is Q - 1. +passed_zero_left(_, 0, Q, Count) :- Count is Q + 1. +passed_zero_left(_, _, Q, Q). + +passed_count(Move, Pos, NewPos, Q, Count) :- + Move < 0, + passed_zero_left(Pos, NewPos, Q, Count). + +passed_count(_, _, _, Q, Q). + +move_dial(Pos, N, NewPos, Passed0Count) :- + T is Pos + N, + divmod(T, 100, Q0, NewPos), + Q is abs(Q0), + passed_count(N, Pos, NewPos, Q, Passed0Count). + +solve(_, [], 0, 0). +solve(Pos, [Move|Rest], Task1, Task2) :- + move_dial(Pos, Move, NewPos, T2R1), + ( NewPos =:= 0 -> T1R1 = 1 ; T1R1 = 0 ), + solve(NewPos, Rest, T1R2, T2R2), + Task1 is T1R1 + T1R2, + Task2 is T2R1 + T2R2. + +solve(Moves, Task1, Task2) :- + solve(50, Moves, Task1, Task2). + +:- + parse_input("input/01.txt", Moves), + solve(Moves, Task1, Task2), + format("~d ~d~n", [Task1, Task2]).