|
|
@ -0,0 +1,31 @@ |
|
|
|
|
|
-module(day2). |
|
|
|
|
|
|
|
|
|
|
|
-export([solve/1]). |
|
|
|
|
|
|
|
|
|
|
|
solve(InputData) -> |
|
|
|
|
|
RoundData = binary:split(InputData, <<$\n>>, [trim_all, global]), |
|
|
|
|
|
Rounds = lists:map(fun parse_round/1, RoundData), |
|
|
|
|
|
RoundPoints = lists:map(fun score_round/1, Rounds), |
|
|
|
|
|
{lists:sum(RoundPoints), none}. |
|
|
|
|
|
|
|
|
|
|
|
parse_round(<<TheirCode, $\s, YourCode>>) -> {parse_theirs(TheirCode), parse_yours(YourCode)}. |
|
|
|
|
|
|
|
|
|
|
|
score_round(Round = {_Theirs, Yours}) -> round_points(Round) + shape_points(Yours). |
|
|
|
|
|
|
|
|
|
|
|
parse_theirs($A) -> rock; |
|
|
|
|
|
parse_theirs($B) -> paper; |
|
|
|
|
|
parse_theirs($C) -> scissors. |
|
|
|
|
|
|
|
|
|
|
|
parse_yours($X) -> rock; |
|
|
|
|
|
parse_yours($Y) -> paper; |
|
|
|
|
|
parse_yours($Z) -> scissors. |
|
|
|
|
|
|
|
|
|
|
|
round_points({rock, paper}) -> 6; |
|
|
|
|
|
round_points({paper, scissors}) -> 6; |
|
|
|
|
|
round_points({scissors, rock}) -> 6; |
|
|
|
|
|
round_points({Shape, Shape}) -> 3; |
|
|
|
|
|
round_points({_Theirs, _Yours}) -> 0. |
|
|
|
|
|
|
|
|
|
|
|
shape_points(rock) -> 1; |
|
|
|
|
|
shape_points(paper) -> 2; |
|
|
|
|
|
shape_points(scissors) -> 3. |