-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), Rounds2 = lists:map(fun parse_round2/1, RoundData), RoundPoints2 = lists:map(fun score_round/1, Rounds2), {lists:sum(RoundPoints), lists:sum(RoundPoints2)}. parse_round(<>) -> {parse_theirs(TheirCode), parse_yours(YourCode)}. parse_round2(<>) -> OutcomeScore = parse_outcome_points(OutcomeCode), TheirShape = parse_theirs(TheirCode), [YourShape] = [Shape || Shape <- [rock, paper, scissors], round_points({TheirShape, Shape}) == OutcomeScore], {TheirShape, YourShape}. 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. parse_outcome_points($X) -> 0; parse_outcome_points($Y) -> 3; parse_outcome_points($Z) -> 6. 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.