45 lines
991 B
Perl
45 lines
991 B
Perl
|
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), !.
|
||
|
|