Solve day 3

This commit is contained in:
Martin Frost 2024-12-19 10:44:27 +01:00
parent 7516cff589
commit 28e733e405
2 changed files with 28 additions and 7 deletions

1
priv/test_input/3_2.txt Normal file
View File

@ -0,0 +1 @@
xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))

View File

@ -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.