Browse Source

Day 10-1

trunk
Shanti Chellaram 3 years ago
parent
commit
f283c20581
  1. 34
      day10.erl

34
day10.erl

@ -0,0 +1,34 @@
-module(day10).
-export([solve/1]).
solve(Input) ->
{part1(Input), none}.
part1(Input) ->
History = run(Input, [{1, 1}]),
Interesting = [20, 60, 100, 140, 180, 220],
Score = fun(Key) ->
Key * element(2, lists:keyfind(Key, 1, History))
end,
lists:sum(lists:map(Score, Interesting)).
run(<<"\n", Rest/binary>>, StateIn) ->
run(Rest, StateIn);
run(<<"noop", Rest/binary>>, [{Cycle, X}|_]=History) ->
run(Rest, [{Cycle+1, X} | History]);
run(<<"addx ", RestIn/binary>>, [{Cycle, X}|_]=History) ->
{Value, RestOut} = parse_int(RestIn),
run(RestOut, [{Cycle+2, X+Value}, {Cycle+1, X} | History]);
run(<<>>, State) ->
State.
parse_int(<<$-, Rest/binary>>) ->
{AbsoluteValue, Binary} = parse_int0(Rest, 0),
{-1 * AbsoluteValue, Binary};
parse_int(Binary) ->
parse_int0(Binary, 0).
parse_int0(<<Digit, Rest/binary>>, Acc) when Digit >= $0 andalso Digit =< $9 ->
parse_int0(Rest, Acc*10 + Digit - $0);
parse_int0(Binary, Acc) when is_binary(Binary) -> {Acc, Binary}.
Loading…
Cancel
Save