From 531a880e0f5fab2808dc56ff91ae421179adbf38 Mon Sep 17 00:00:00 2001 From: chayleaf Date: Thu, 2 Dec 2021 18:50:22 +0700 Subject: [PATCH] day 2 (prolog) --- input/02 | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++ pl/02.1.pl | 34 ++ pl/02.2.pl | 38 ++ 3 files changed, 1072 insertions(+) create mode 100644 input/02 create mode 100644 pl/02.1.pl create mode 100644 pl/02.2.pl diff --git a/input/02 b/input/02 new file mode 100644 index 0000000..2efbeb6 --- /dev/null +++ b/input/02 @@ -0,0 +1,1000 @@ +forward 9 +down 9 +down 6 +up 2 +down 5 +forward 3 +forward 6 +forward 8 +down 8 +up 4 +down 5 +down 4 +up 6 +down 7 +forward 5 +forward 5 +down 9 +down 5 +up 4 +forward 1 +forward 7 +down 8 +up 2 +down 1 +down 3 +up 7 +up 5 +down 8 +down 6 +forward 9 +up 8 +down 4 +forward 9 +forward 4 +forward 1 +up 9 +forward 5 +forward 1 +down 2 +down 7 +forward 5 +up 8 +forward 1 +down 9 +down 3 +forward 6 +up 6 +down 4 +forward 6 +down 3 +forward 5 +forward 1 +down 3 +forward 3 +down 8 +down 2 +forward 8 +forward 1 +up 4 +forward 4 +down 1 +down 5 +forward 2 +forward 9 +forward 5 +down 2 +up 9 +forward 2 +down 2 +down 2 +down 9 +up 8 +down 3 +forward 8 +down 4 +up 3 +down 1 +forward 7 +down 7 +forward 9 +down 2 +up 9 +up 3 +down 2 +up 2 +forward 8 +down 3 +forward 2 +forward 6 +down 5 +up 9 +forward 6 +forward 7 +down 3 +forward 1 +down 2 +forward 8 +up 5 +down 6 +forward 1 +down 8 +down 5 +forward 4 +down 5 +forward 3 +forward 5 +up 3 +down 4 +down 8 +up 7 +down 7 +forward 3 +down 2 +forward 3 +up 2 +down 1 +up 2 +forward 4 +forward 2 +down 1 +up 9 +forward 5 +forward 7 +down 6 +down 3 +down 5 +down 4 +up 4 +forward 8 +down 6 +forward 1 +forward 6 +down 8 +down 2 +down 3 +up 8 +forward 9 +down 5 +down 6 +forward 7 +down 2 +forward 6 +up 3 +up 6 +forward 2 +up 8 +up 2 +up 4 +forward 3 +forward 4 +down 7 +up 1 +forward 5 +forward 1 +forward 9 +forward 8 +up 6 +forward 4 +forward 2 +up 9 +forward 8 +down 2 +forward 4 +forward 4 +forward 6 +down 3 +forward 8 +forward 7 +forward 6 +forward 3 +down 5 +down 3 +forward 4 +forward 7 +forward 4 +forward 3 +forward 1 +forward 1 +up 1 +down 4 +up 5 +up 4 +up 8 +forward 7 +forward 4 +forward 3 +up 6 +up 4 +down 4 +up 4 +down 6 +forward 1 +forward 5 +up 3 +forward 5 +up 9 +down 9 +forward 1 +down 3 +forward 7 +up 2 +up 1 +down 8 +forward 9 +forward 3 +forward 2 +forward 6 +down 2 +forward 4 +up 9 +forward 6 +forward 8 +down 5 +down 6 +forward 7 +forward 5 +forward 6 +forward 9 +forward 5 +up 3 +forward 2 +forward 2 +forward 8 +down 5 +forward 9 +forward 7 +forward 5 +up 2 +up 7 +forward 7 +forward 9 +down 9 +up 5 +up 5 +up 1 +forward 8 +forward 3 +forward 2 +forward 4 +down 7 +down 7 +forward 7 +down 2 +forward 4 +down 6 +down 8 +down 5 +down 9 +forward 1 +forward 4 +forward 1 +forward 1 +up 5 +down 5 +up 7 +up 7 +down 6 +down 5 +forward 9 +up 7 +down 2 +down 9 +down 9 +forward 3 +up 9 +down 7 +down 2 +up 6 +down 9 +down 6 +up 3 +up 6 +forward 4 +forward 6 +down 2 +up 3 +down 3 +forward 8 +up 1 +forward 8 +forward 5 +forward 4 +forward 9 +forward 8 +up 1 +forward 2 +down 8 +up 9 +forward 3 +forward 9 +down 3 +down 8 +down 5 +up 5 +up 3 +down 5 +down 4 +down 2 +forward 1 +forward 8 +down 3 +down 1 +down 5 +down 1 +up 1 +down 4 +forward 6 +down 5 +down 7 +forward 4 +down 2 +down 2 +up 1 +forward 9 +down 2 +forward 7 +up 4 +down 8 +down 5 +up 2 +down 7 +forward 7 +up 4 +down 8 +forward 9 +up 3 +down 9 +forward 4 +forward 5 +up 6 +forward 5 +down 6 +down 3 +down 1 +down 6 +forward 7 +forward 3 +forward 4 +up 8 +forward 7 +down 3 +up 2 +up 3 +up 5 +forward 4 +forward 9 +forward 1 +down 2 +forward 4 +forward 1 +forward 6 +down 6 +forward 8 +down 2 +forward 7 +down 5 +forward 6 +down 4 +down 8 +down 6 +forward 9 +forward 2 +forward 4 +forward 9 +down 1 +down 9 +forward 2 +down 3 +forward 2 +down 4 +down 6 +up 5 +forward 9 +forward 1 +down 1 +forward 8 +forward 7 +forward 2 +forward 4 +forward 3 +up 8 +down 4 +forward 5 +up 5 +forward 4 +up 5 +forward 7 +up 7 +forward 5 +down 3 +up 9 +up 2 +forward 9 +forward 8 +forward 7 +down 8 +forward 8 +down 2 +forward 7 +forward 4 +down 7 +up 4 +forward 2 +forward 1 +up 5 +forward 5 +down 5 +down 1 +down 7 +up 6 +down 5 +down 6 +forward 2 +forward 2 +forward 8 +down 9 +down 4 +down 3 +forward 7 +forward 6 +forward 5 +up 9 +forward 8 +forward 9 +forward 4 +down 9 +down 6 +down 2 +down 7 +up 3 +forward 3 +forward 5 +up 6 +down 7 +down 3 +forward 3 +down 5 +down 2 +down 4 +up 4 +down 5 +forward 3 +forward 1 +forward 7 +down 7 +forward 8 +up 7 +forward 3 +forward 8 +down 9 +down 1 +forward 4 +forward 4 +forward 5 +forward 6 +down 5 +down 6 +forward 6 +down 5 +down 7 +forward 2 +down 1 +down 8 +down 3 +down 4 +forward 9 +forward 4 +down 4 +up 4 +down 3 +forward 5 +down 4 +forward 3 +forward 9 +up 7 +down 5 +down 1 +forward 8 +down 2 +forward 9 +forward 6 +forward 3 +down 7 +forward 2 +forward 5 +down 6 +forward 1 +forward 7 +up 1 +forward 3 +forward 7 +forward 3 +forward 5 +down 5 +forward 6 +forward 9 +up 4 +forward 6 +forward 3 +down 9 +up 4 +up 6 +down 5 +down 8 +down 2 +down 9 +forward 8 +up 8 +forward 3 +forward 8 +up 8 +down 5 +down 9 +down 1 +down 3 +forward 3 +forward 9 +up 9 +down 5 +down 6 +down 1 +forward 9 +up 3 +forward 3 +forward 9 +down 7 +down 4 +down 5 +up 5 +forward 2 +down 5 +up 5 +up 4 +up 5 +forward 1 +down 2 +forward 7 +down 9 +forward 8 +forward 7 +forward 5 +down 3 +forward 5 +forward 7 +forward 1 +up 5 +forward 3 +forward 1 +down 1 +up 1 +down 7 +up 4 +forward 8 +up 9 +down 9 +down 9 +forward 8 +forward 3 +forward 3 +up 4 +down 3 +forward 4 +forward 6 +forward 7 +down 2 +forward 5 +down 3 +down 9 +down 4 +down 4 +forward 3 +down 3 +down 6 +up 5 +up 4 +down 6 +up 9 +down 9 +up 2 +up 1 +down 3 +forward 6 +up 6 +forward 1 +down 9 +down 6 +down 8 +down 9 +down 6 +forward 4 +up 6 +down 2 +forward 9 +forward 2 +down 4 +up 3 +forward 6 +down 2 +down 7 +down 1 +up 6 +down 5 +forward 1 +forward 7 +up 9 +forward 2 +up 8 +down 4 +forward 8 +up 2 +up 2 +down 1 +forward 6 +down 3 +forward 7 +forward 2 +down 5 +down 6 +up 8 +forward 4 +up 2 +forward 7 +forward 4 +forward 2 +down 1 +forward 7 +down 1 +up 1 +down 9 +forward 5 +forward 3 +down 6 +up 5 +up 9 +down 1 +forward 2 +forward 8 +down 5 +down 4 +forward 6 +forward 1 +forward 4 +forward 2 +forward 4 +up 7 +forward 5 +forward 2 +down 2 +forward 1 +forward 4 +down 4 +forward 7 +down 6 +forward 9 +forward 9 +forward 3 +up 5 +up 5 +down 6 +forward 7 +forward 8 +down 5 +forward 6 +forward 5 +forward 1 +forward 7 +forward 6 +up 2 +up 4 +forward 6 +down 4 +down 9 +forward 9 +down 4 +up 2 +down 5 +forward 9 +down 7 +forward 9 +up 9 +forward 9 +up 7 +up 2 +up 6 +forward 1 +up 9 +down 4 +down 8 +forward 8 +forward 7 +up 5 +forward 4 +down 3 +down 5 +up 9 +up 5 +forward 1 +down 3 +down 9 +up 2 +forward 5 +down 8 +down 3 +forward 5 +up 8 +forward 1 +forward 8 +forward 6 +down 2 +down 8 +down 8 +down 8 +forward 8 +forward 9 +up 2 +up 9 +up 8 +forward 2 +down 4 +up 7 +down 3 +forward 1 +forward 7 +down 8 +down 2 +forward 6 +forward 2 +down 6 +down 6 +up 9 +forward 9 +down 7 +forward 7 +down 4 +up 2 +up 7 +down 8 +forward 6 +up 2 +forward 4 +forward 9 +down 7 +forward 4 +up 4 +forward 8 +down 4 +forward 6 +forward 8 +down 2 +down 6 +up 4 +forward 5 +forward 1 +down 2 +up 6 +down 6 +down 3 +up 2 +up 4 +forward 1 +up 3 +up 5 +down 4 +down 1 +down 7 +down 7 +down 4 +forward 7 +down 9 +down 4 +down 2 +down 7 +forward 7 +forward 8 +forward 1 +down 8 +down 3 +down 5 +down 8 +forward 7 +forward 9 +forward 3 +up 8 +forward 5 +up 5 +up 2 +forward 4 +forward 6 +down 8 +down 1 +up 6 +forward 5 +forward 5 +down 9 +forward 3 +up 1 +down 1 +forward 5 +forward 5 +up 5 +down 4 +up 6 +forward 8 +forward 6 +up 5 +forward 2 +up 3 +forward 9 +forward 5 +down 9 +forward 3 +forward 1 +forward 4 +up 5 +forward 3 +forward 3 +up 9 +down 2 +down 3 +down 1 +forward 8 +down 4 +forward 8 +forward 8 +down 8 +forward 9 +forward 8 +forward 7 +down 6 +forward 5 +down 6 +up 8 +forward 6 +down 8 +forward 8 +down 6 +up 2 +forward 5 +forward 1 +up 2 +forward 4 +down 5 +up 8 +up 3 +forward 8 +down 3 +forward 4 +up 5 +forward 2 +down 3 +down 2 +down 7 +forward 5 +down 5 +forward 2 +up 1 +down 3 +down 9 +up 4 +up 3 +down 8 +up 1 +down 5 +down 5 +forward 7 +up 2 +down 3 +up 3 +forward 1 +forward 4 +forward 3 +up 5 +down 5 +up 3 +down 2 +forward 6 +down 6 +up 3 +forward 9 +down 9 +up 4 +down 4 +down 6 +up 9 +forward 3 +forward 2 +up 2 +up 5 +forward 2 +up 5 +forward 7 +down 8 +down 7 +up 8 +down 1 +up 1 +up 9 +forward 7 +forward 5 +down 9 +forward 8 +down 8 +forward 4 +forward 1 +forward 2 +down 8 +forward 3 +forward 6 +down 9 +forward 2 +forward 9 +down 4 +down 1 +down 1 +down 8 +down 1 +down 4 +up 3 +down 7 +down 5 +forward 1 +forward 5 +forward 8 +forward 4 +down 7 +down 6 +forward 2 +down 3 +down 3 +down 3 +forward 5 +forward 7 +down 4 +forward 6 +forward 9 +down 1 +forward 7 +down 5 +up 4 +up 5 +down 3 +down 1 +up 5 +forward 4 +down 9 +down 7 +up 1 +up 9 +up 4 +forward 7 +down 5 +down 8 +forward 5 +forward 9 +down 2 +down 7 +forward 8 +forward 7 +down 6 +down 8 +forward 3 +forward 6 +down 5 +forward 7 +up 7 +down 8 +forward 9 +down 3 +up 3 +forward 4 +up 4 +forward 3 +forward 4 +forward 9 +forward 5 +down 3 +down 6 +forward 9 +forward 4 +forward 1 +forward 7 +forward 8 +forward 2 +forward 7 +up 9 +down 8 +forward 4 +forward 4 +down 5 +forward 2 +forward 5 +down 6 +forward 4 +forward 2 +forward 7 +down 6 +down 2 +down 5 +down 1 +forward 5 diff --git a/pl/02.1.pl b/pl/02.1.pl new file mode 100644 index 0000000..1961243 --- /dev/null +++ b/pl/02.1.pl @@ -0,0 +1,34 @@ +read_file(Stream, []) :- + at_end_of_stream(Stream). + +read_file(Stream, [(Cmd, N)|L]) :- + \+ at_end_of_stream(Stream), + read_line_to_codes(Stream, C), + string_chars(S, C), + split_string(S, " ", "", [S0, S1]), + atom_string(Cmd, S0), + number_string(N, S1), + read_file(Stream, L). + +main :- + open('../input/02', read, Stream), + read_file(Stream, Lines), !, + close(Stream), + step(Lines, X, Y), + Z is X * Y, + print((X, Y, Z)). + +step([], 0, 0). + +step([(forward, N)|Tail], X, Y) :- + step(Tail, X0, Y), + X is X0 + N. + +step([(up, N)|Tail], X, Y) :- + step(Tail, X, Y0), + Y is Y0 - N. + +step([(down, N)|Tail], X, Y) :- + step(Tail, X, Y0), + Y is Y0 + N. + diff --git a/pl/02.2.pl b/pl/02.2.pl new file mode 100644 index 0000000..b504a32 --- /dev/null +++ b/pl/02.2.pl @@ -0,0 +1,38 @@ +read_file(Stream, []) :- + at_end_of_stream(Stream). + +read_file(Stream, [(Cmd, N)|L]) :- + \+ at_end_of_stream(Stream), + read_line_to_codes(Stream, C), + string_chars(S, C), + split_string(S, " ", "", [S0, S1]), + atom_string(Cmd, S0), + number_string(N, S1), + read_file(Stream, L). + +main :- + open('../input/02', read, Stream), + read_file(Stream, Lines), !, + close(Stream), + step(Lines, X, Y), + Z is X * Y, + print((X, Y, Z)). + +step(Commands, X, Y) :- + step_(Commands, 0, 0, 0, X, Y). + +step_([], _, X0, Y0, X0, Y0). + +step_([(forward, N)|Tail], Aim, X0, Y0, X, Y) :- + X1 is X0 + N, + Y1 is Y0 + N * Aim, + step_(Tail, Aim, X1, Y1, X, Y). + +step_([(up, N)|Tail], Aim, X0, Y0, X, Y) :- + Aim1 is Aim - N, + step_(Tail, Aim1, X0, Y0, X, Y). + +step_([(down, N)|Tail], Aim, X0, Y0, X, Y) :- + Aim1 is Aim + N, + step_(Tail, Aim1, X0, Y0, X, Y). +