#include #include #include #include enum class Play : int { ROCK = 1, PAPER = 2, SCISSORS = 3, }; enum class Result : char { WIN = 'W', LOSS = 'L', TIE = 'T', }; typedef std::pair game_t; Play char_to_play(char c) { switch(c) { case 'A': return Play::ROCK; case 'B': return Play::PAPER; case 'C': return Play::SCISSORS; } throw; } Result char_to_result(char c) { switch(c) { case 'X': return Result::LOSS; case 'Y': return Result::TIE; case 'Z': return Result::WIN; } throw; } Play cheat(Play opponent, Result result) { if(result == Result::WIN) { if(opponent == Play::ROCK) return Play::PAPER; if(opponent == Play::PAPER) return Play::SCISSORS; if(opponent == Play::SCISSORS) return Play::ROCK; } else if(result == Result::LOSS) { if(opponent == Play::ROCK) return Play::SCISSORS; if(opponent == Play::PAPER) return Play::ROCK; if(opponent == Play::SCISSORS) return Play::PAPER; } else { return opponent; } throw; } std::vector read_file(std::string path) { std::fstream file; file.open(path); std::string line; std::vector games; while(file) { std::getline(file, line); if(line == "") break; auto opponent = char_to_play(line[0]); auto mine = char_to_result(line[2]); games.push_back(std::make_pair(opponent, mine)); } return games; } int score_game(Play play, Result result) { int score = 0; if(result == Result::WIN) score = 6; else if(result == Result::TIE) score = 3; score += (int)play; return score; } int main(int argc, char *argv[]) { auto games = read_file(argv[1]); int total = 0; for(auto game : games) { auto [opponent, result] = game; auto me = cheat(opponent, result); std::cout << (int)opponent << " " << (int)me << std::endl; int score = score_game(me, result); std::cout << score << std::endl; total += score; } std::cout << total << std::endl; return 0; }