Day 14: Chocolate Charts - Advent of Code 2018
Stavros Aronis
14.12.2018
I did the Advent of Code 2018 day 14 challenge in Erlang! Parts one and two are as follows:
#!/usr/bin/env escript
-mode(native).
%% https://adventofcode.com/2018/day/14
-define(INPUT, 635041).
main(Args) ->
Sol =
case Args of
["2"] -> seek([6,3,5,0,4,1]);
_ ->
{_, P} = score(?INPUT),
P
end,
io:format("~p~n", [Sol]).
seek(Target) ->
seek(Target, 1000).
seek(Target, Range) ->
io:format("~p~n", [Range]),
{M, _} = score(Range),
io:format("Score done~n"),
case find(Target, M) of
{true, I} -> I;
false -> seek(Target, Range * 10)
end.
find(Target, M) ->
Rs = [D || {_, D} <- lists:sort(maps:to_list(M))],
io:format("Seq Done"),
find(0, Rs, Target).
find(_, [], _) ->
false;
find(I, [_|RRs] = Rs, Ds) ->
case lists:prefix(Ds, Rs) of
true ->
{true, I};
false ->
find(I + 1, RRs, Ds)
end.
score(N) ->
score(0, 1, #{0 => 3, 1 => 7}, 2, N).
score(_, _, Map, M, N) when M > N + 11 ->
Fold =
fun(X, A) ->
A * 10 + maps:get(X, Map)
end,
{Map, lists:foldl(Fold, 0, lists:seq(N, N + 9))};
score(E1, E2, Map, M, N) ->
%io:format("~p~n", [[D || {_, D} <- lists:sort(maps:to_list(Map))]]),
S1 = maps:get(E1, Map),
S2 = maps:get(E2, Map),
New = S1 + S2,
%io:format("~p~n", [{E1, E2, S1, S2, New}]),
{NewMap, NewM} =
case New > 9 of
true ->
{Map#{M => New div 10, M + 1 => New rem 10}, M + 2};
false ->
{Map#{M => New}, M + 1}
end,
{NewE1, NewE2} =
{(E1 + S1 + 1) rem NewM, (E2 + S2 + 1) rem NewM},
score(NewE1, NewE2, NewMap, NewM, N).
ARTICLES: 6
Day 18: Settlers of The North Pole - Advent of Code 2018
Article by Stavros Aronis
I did the Advent of Code 2018 day 18 challenge in Erlang! Parts one and two are as follows:
READ MOREDay 13: Mine Cart Madness - Advent of Code 2018
Article by Stavros Aronis
I did the Advent of Code 2018 day 13 challenge in Erlang! Parts one and two are as follows:
READ MOREDay 12: Subterranean Sustainability - Advent of Code 2018
Article by Stavros Aronis
I did the Advent of Code 2018 day 12 challenge in Erlang! Parts one and two are as follows:
READ MOREDay 9: Marble Mania - Advent of Code 2018
Article by Stavros Aronis
I did the Advent of Code 2018 day 9 challenge in Erlang! Parts one and two are as follows:
READ MOREDay 8: Memory maneuver - Advent of Code
Article by Stavros Aronis
I did the Advent of Code 2018 day 8 challenge in Erlang! Parts one and two are as follows:
READ MORE