Solve day 3
This commit is contained in:
parent
7516cff589
commit
28e733e405
|
|
@ -0,0 +1 @@
|
|||
xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))
|
||||
|
|
@ -20,7 +20,9 @@ part_2() ->
|
|||
|
||||
part_2(Filename) ->
|
||||
Input = read_input(Filename),
|
||||
0.
|
||||
Pairs = parse_2(Input),
|
||||
Products = lists:map(fun({A, B}) -> A * B end, Pairs),
|
||||
lists:sum(Products).
|
||||
|
||||
%% Private Functions
|
||||
|
||||
|
|
@ -49,6 +51,26 @@ parse(<<"">>, Pairs) ->
|
|||
|
||||
make_pair(A, B) -> {binary_to_integer(A), binary_to_integer(B)}.
|
||||
|
||||
parse_2(Binary) ->
|
||||
parse_2(enabled, Binary, []).
|
||||
|
||||
parse_2(enabled, <<"mul(",A:1/binary,",",B:1/binary,")",Rest/binary>>, Pairs) -> parse_2(enabled, Rest, [make_pair(A, B) | Pairs]);
|
||||
parse_2(enabled, <<"mul(",A:1/binary,",",B:2/binary,")",Rest/binary>>, Pairs) -> parse_2(enabled, Rest, [make_pair(A, B) | Pairs]);
|
||||
parse_2(enabled, <<"mul(",A:1/binary,",",B:3/binary,")",Rest/binary>>, Pairs) -> parse_2(enabled, Rest, [make_pair(A, B) | Pairs]);
|
||||
parse_2(enabled, <<"mul(",A:2/binary,",",B:1/binary,")",Rest/binary>>, Pairs) -> parse_2(enabled, Rest, [make_pair(A, B) | Pairs]);
|
||||
parse_2(enabled, <<"mul(",A:2/binary,",",B:2/binary,")",Rest/binary>>, Pairs) -> parse_2(enabled, Rest, [make_pair(A, B) | Pairs]);
|
||||
parse_2(enabled, <<"mul(",A:2/binary,",",B:3/binary,")",Rest/binary>>, Pairs) -> parse_2(enabled, Rest, [make_pair(A, B) | Pairs]);
|
||||
parse_2(enabled, <<"mul(",A:3/binary,",",B:1/binary,")",Rest/binary>>, Pairs) -> parse_2(enabled, Rest, [make_pair(A, B) | Pairs]);
|
||||
parse_2(enabled, <<"mul(",A:3/binary,",",B:2/binary,")",Rest/binary>>, Pairs) -> parse_2(enabled, Rest, [make_pair(A, B) | Pairs]);
|
||||
parse_2(enabled, <<"mul(",A:3/binary,",",B:3/binary,")",Rest/binary>>, Pairs) -> parse_2(enabled, Rest, [make_pair(A, B) | Pairs]);
|
||||
parse_2(enabled, <<"don't()",Rest/binary>>, Pairs) -> parse_2(disabled, Rest, Pairs);
|
||||
parse_2(disabled, <<"do()",Rest/binary>>, Pairs) -> parse_2(enabled, Rest, Pairs);
|
||||
parse_2(State, <<_:8,Rest/binary>>, Pairs) ->
|
||||
parse_2(State, Rest, Pairs);
|
||||
parse_2(_State, <<_Whatever:8>>, Pairs) ->
|
||||
Pairs;
|
||||
parse_2(_State, <<"">>, Pairs) ->
|
||||
Pairs.
|
||||
|
||||
%% TESTS
|
||||
|
||||
|
|
@ -56,13 +78,11 @@ make_pair(A, B) -> {binary_to_integer(A), binary_to_integer(B)}.
|
|||
-include_lib("eunit/include/eunit.hrl").
|
||||
|
||||
part_1_test() ->
|
||||
TestFile = test_data(),
|
||||
TestFile = filename:absname("./priv/test_input/3.txt"),
|
||||
?assertEqual(161, part_1(TestFile)).
|
||||
|
||||
%% part_2_test() ->
|
||||
%% TestFile = test_data(),
|
||||
%% ?assertEqual(4, part_2(TestFile)).
|
||||
part_2_test() ->
|
||||
TestFile = filename:absname("./priv/test_input/3_2.txt"),
|
||||
?assertEqual(48, part_2(TestFile)).
|
||||
|
||||
test_data() ->
|
||||
filename:absname("./priv/test_input/3.txt").
|
||||
-endif.
|
||||
|
|
|
|||
Loading…
Reference in New Issue