From b69b03fc316c4985fca822eff9071dcca0c6c943 Mon Sep 17 00:00:00 2001 From: chayleaf Date: Thu, 9 Dec 2021 09:36:51 +0700 Subject: [PATCH] day 6 prolog --- pl/06.1.pl | 44 ++++++++++++++++++++++++++++++++++++++++++++ pl/06.2.pl | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 pl/06.1.pl create mode 100644 pl/06.2.pl diff --git a/pl/06.1.pl b/pl/06.1.pl new file mode 100644 index 0000000..7a52520 --- /dev/null +++ b/pl/06.1.pl @@ -0,0 +1,44 @@ +numbers_strings([], []). +numbers_strings([A|As], [B|Bs]) :- + number_string(A, B), + numbers_strings(As, Bs). + +read_file(Stream, X) :- + \+ at_end_of_stream(Stream), + read_line_to_codes(Stream, C), + string_chars(S, C), + split_string(S, ",", "", Y), + numbers_strings(X, Y), + at_end_of_stream(Stream). + +main :- + open('../input/06', read, Stream), + read_file(Stream, Lines), !, + close(Stream), + iterate_n(256, Lines, Res), + length(Res, N), + print(N). + +tick_existing([], [], 0). +tick_existing([0|Xs], [6|Ys], New) :- + tick_existing(Xs, Ys, New1), + New is New1 + 1. +tick_existing([X|Xs], [Y|Ys], New) :- + X > 0, + tick_existing(Xs, Ys, New), + Y is X - 1. +spawn_n(0, []). +spawn_n(N, [8|Ys]) :- + N1 is N - 1, + spawn_n(N1, Ys). +iterate(X, Y) :- + tick_existing(X, Y0, New), !, + spawn_n(New, Y1), + append(Y0, Y1, Y), !. + +iterate_n(0, X, X). +iterate_n(N, X, Y) :- + N1 is N - 1, + iterate(X, Y0), !, + iterate_n(N1, Y0, Y), !. + diff --git a/pl/06.2.pl b/pl/06.2.pl new file mode 100644 index 0000000..0a34951 --- /dev/null +++ b/pl/06.2.pl @@ -0,0 +1,53 @@ +numbers_strings([], []). +numbers_strings([A|As], [B|Bs]) :- + number_string(A, B), + numbers_strings(As, Bs). + +read_file(Stream, X) :- + \+ at_end_of_stream(Stream), + read_line_to_codes(Stream, C), + string_chars(S, C), + split_string(S, ",", "", Y), + numbers_strings(X, Y), + at_end_of_stream(Stream). + +main :- + open('../input/06', read, Stream), + read_file(Stream, Lines), !, + close(Stream), + create_buckets(B0), + add_to_bucket_seq(B0, Lines, B), + %add_to_bucket_seq(B0, [3,4,3,1,2], B), + iterate_n(256, B, B1), + sum_list(B1, S), + print([B1,S]). + +create_buckets([0,0,0,0,0,0,0,0,0]). + +prefix(0, _, []). +prefix(N, [A|As], [A|Ps]) :- + N > 0, + N1 is N - 1, + prefix(N1, As, Ps). + +add_to_bucket(A, N, B) :- + prefix(N, A, P), + append([P, [X], S], A), + X1 is X + 1, + append([P, [X1], S], B). + +add_to_bucket_seq(A, [], A). +add_to_bucket_seq(A, [N|Ns], B) :- + add_to_bucket(A, N, B0), + add_to_bucket_seq(B0, Ns, B). + +iterate([A0,A1,A2,A3,A4,A5,A6,A7,A8], [A1,A2,A3,A4,A5,A6,B,A8,A0]) :- + B is A0 + A7. + +iterate_n(0, A, A). +iterate_n(N, A, B) :- + N > 0, + iterate(A, B0), + N1 is N - 1, + iterate_n(N1, B0, B). +