From 022b27d847e4e31e89259bb315b11c6a637744b7 Mon Sep 17 00:00:00 2001 From: Luke Else Date: Fri, 2 Dec 2022 17:38:22 +0000 Subject: [PATCH] Completed day2 --- input/day02 | 2500 ++++++++++++++++++++++++++++++++++++++++++++ src/days/day02.cpp | 101 +- 2 files changed, 2599 insertions(+), 2 deletions(-) diff --git a/input/day02 b/input/day02 index e69de29..ced5eab 100644 --- a/input/day02 +++ b/input/day02 @@ -0,0 +1,2500 @@ +C X +A Y +C Z +B Y +C Z +A Z +B Y +C Z +C Z +B X +A X +A Z +C Z +C X +A Z +A Z +C Z +A X +A Z +A Z +A Z +A Z +A Z +C Z +A Z +C X +C Z +A Z +A Z +B Y +C Z +B X +B X +A Z +C Z +A X +A X +B Y +B Z +B Y +A Z +C Z +C X +C Z +C Z +C Z +C Z +A Z +A Z +A Y +A Y +C Z +A X +C Y +A Z +B Y +C Z +C Z +B Y +C Z +C Z +C Z +A Z +A Z +B Y +C Z +A Z +C Z +C Z +A Z +B X +C Z +A X +A X +A Y +C X +A Y +B X +A Z +A Z +C Z +A Z +A Y +C X +A X +B Y +A Z +A Y +C Z +C Y +A X +B Z +B Y +A Y +C Z +C Z +C Z +B Y +A Z +C Z +A Y +C Z +A X +C Z +C Z +A Z +A X +C X +C X +A X +A X +A Y +A Z +C Z +A X +A Z +B Y +A Y +A Z +C Z +B Y +A Z +C Z +A Z +A X +A Z +B Y +C Z +C Z +C Z +C X +A X +C Z +A X +B Y +C X +C Z +B Y +B Y +B X +C Z +B Y +C Z +C Z +C Z +A Z +C Z +C Z +B Y +C Z +B Z +C Z +C Z +A X +C Z +C Z +A Z +C Z +C X +C Z +A Z +A Z +A X +B X +C Y +A X +A Y +C Y +C Z +A Z +A X +C X +C Z +A X +B Y +C Z +A X +A X +C Z +B Y +C Z +A Y +A Z +B Y +A Y +A X +C X +A Z +C Z +B Y +C Z +C Z +C Z +C Z +A Z +C Y +C Z +A Y +A X +A Z +A Z +A Z +C Z +C Z +A Z +C Z +A Z +C Z +A Z +C Z +A X +B Y +C Z +C Z +C X +B X +A Z +C Z +A Y +C Z +B Y +A Z +C Y +C Z +C Y +C Z +B Y +A Y +A Z +C Z +C X +C Z +A Z +A Z +A Z +A Z +A Z +C Z +C X +A X +C Z +A X +A Z +A Z +A Z +A Z +A Z +B Y +C Z +C Z +A Z +C Z +C Z +C Z +A Z +C Z +C Z +B Y +C Z +A Z +A Y +C Y +B Y +A Z +A X +A Y +C X +B Y +C Z +C X +C Z +A Z +B Y +C Z +C X +C Z +A Y +B Z +C Z +C Z +C Z +A X +B Y +C Z +C X +B Y +B Y +C X +A Z +B Y +C Z +A X +B Y +C Z +C Z +A Z +B Y +B Y +B Y +A X +C Z +B Y +B Y +B Y +A X +A Z +C Z +C Z +B Y +A Z +B Y +B X +A Z +C X +A Z +C Z +A Z +C Y +A X +B Y +C Z +B Y +C Y +C X +A Y +C Z +A Y +C X +A Z +A Z +A Z +A Z +C Z +A Y +B Y +C Z +C Z +B Y +C Z +C Z +C Z +C Z +C Z +C Z +A X +C Z +C Z +C Z +A X +A Z +A X +A Z +A X +A X +C Z +A Z +B Y +C Z +A Z +C Y +A Z +B Y +B Y +C Z +B Y +B Y +A Y +B Y +A X +C Z +A Y +C Z +A Z +A Z +A X +A Z +A X +C Z +B Y +A Z +A X +C Z +C Z +C Z +A Z +A Z +C X +A Z +A Y +A X +C Z +A Y +C Z +B X +C X +A X +A X +C Z +A Y +C X +A Z +B X +A Z +A Z +A Z +A X +A Y +A Z +C Z +A X +C Z +A X +A Z +A Z +B Y +A Z +C X +C X +C Z +A Z +C X +A Z +A Y +C Z +C Z +B Y +C Z +C Z +A Z +A Y +B X +C X +C Z +A Z +C Z +A X +A Z +A Z +B Y +A Y +A Z +A Z +A Z +C Y +B Y +A Y +C Z +C Z +C X +B Y +C Z +C Z +A Y +A X +C Z +C Z +C X +A Z +B X +C Z +B Y +A Y +C Z +C Z +B X +A X +A X +C Z +A X +A X +C Z +A Z +C Z +A Z +A Z +C Z +A Y +C Z +C Z +C Z +A Z +C Z +C Z +A Y +C Z +C Z +C Z +C Z +C Z +A Z +C Z +B Y +A Z +C Z +C X +A X +C Z +B Y +A Z +A X +B Y +C Z +C Z +C Z +A X +C Z +A Z +A Y +A Y +A Z +A Z +A Y +B Y +A Z +C Z +B Y +C Z +A Z +C Z +B Y +B Z +A X +C Z +A Y +A Y +A Z +A X +C Z +C Z +C Z +C Z +C Z +A Z +C Z +A Z +A Y +A Z +C X +A Z +C Y +B Z +C X +A Z +A X +A X +B Y +C X +C Z +B Y +A Z +C Z +C Z +A Z +C Z +A Z +C X +C Y +C Z +A X +C Y +C Z +A Z +A Z +C Z +C Z +A Y +C Z +C Z +B Z +C X +A X +A Z +C Z +A Y +C Z +C Z +A X +A Z +A X +A Y +A Y +A Y +C Z +B Y +C Z +A X +C Y +C Z +B Y +A X +C Z +A Z +A Z +B Y +C Y +A Y +C Y +A Z +C Z +A Z +C Z +C Z +A Z +A Z +C Z +A Z +C Z +A Y +C Z +C X +C Z +C Z +C Z +C Z +A X +B Z +B X +B Y +B Y +C Z +A X +A X +B Y +A Z +A X +C Z +A X +C X +A Y +A X +C Z +C Z +C Z +C Z +C Z +A X +C Z +B Y +C X +A X +A Z +A Z +C Z +C Z +A Z +A Z +C Z +A X +A Z +B Y +C X +A X +A Y +A Z +C Z +A Z +A Z +B Y +A X +B Y +C X +A Y +B Y +A Z +C Z +B Y +A Z +C Z +C Z +A Z +C Z +A Z +C Z +B Y +A Z +A Y +C Z +B Y +A Z +C Z +C Z +A Z +A X +A Z +A Z +C Y +A Y +C Z +C Y +C Z +C Z +B Y +C Z +C Y +A Z +C Z +B Z +C Y +B Y +C Y +C Z +A Y +C Z +A Z +C Z +A Y +C Z +C Z +B Y +B Y +A Z +C Z +B Z +C X +B Y +B Y +C X +B Y +A X +A X +A Y +A Z +A X +A X +C Z +C Z +C Z +C X +C Z +B Y +B Z +C Z +A Z +A Y +A X +B Y +B X +A X +A Z +C Z +C Z +A Z +C Z +A X +B X +B Z +C Z +B Y +A Z +A Z +C X +A X +A Y +C Z +B Y +C Z +A Z +A Z +A Y +C Z +A Z +A Z +A Z +C Z +C Z +C Z +A X +A X +B X +C Z +A Y +A Y +A Y +C Z +A Z +A X +C Z +A Z +A Z +A X +C Z +C Z +C X +A Z +C Z +C Z +C Z +A Z +C Z +A Z +C X +A Z +C Z +C Z +A Y +A Y +C Z +C Z +C X +A Z +A Y +C Z +B Y +C Z +A Z +C Z +C X +A Z +A X +B Y +B Y +C Z +A Z +A Z +A Z +B Z +B Y +C Z +A Z +C Z +C Z +A Z +A Z +A Z +A X +B Y +C Z +A X +A Y +A Z +C Z +A Z +C Z +C Z +C X +A Y +C Z +C Z +C Z +C Z +B Y +C Z +C Z +B Z +C Z +A X +C Z +C Z +C Z +A Z +C Z +C X +A Y +C Z +A Z +A Y +A X +B X +B Y +A Z +A Z +A X +A Z +C Z +A Z +A Z +A Z +A Z +C Z +A X +A Z +A Z +A Y +C Z +B Y +A X +A X +A X +B Y +C Z +C Z +C Z +C Z +B Y +A X +C Z +B Y +A Z +C Z +A Z +B X +B Y +A X +C Z +C Z +C X +A Z +A X +C Z +B Z +A X +A Z +C Y +A X +C Z +A X +C Z +C Z +A Y +A Z +B Y +A Z +C X +A Y +C Z +C Z +A Y +A Z +C Z +A Y +A X +A X +A Y +C Z +C Z +C Z +A Z +A Z +C X +A Z +C Z +A X +C Z +B Y +C Y +C Z +A Z +C Z +A Z +A Z +C Z +C Z +A Z +C Z +C X +A Z +B Y +A Y +C Z +C Z +C Z +C Z +B Y +A Z +A Z +A Z +C Z +A X +C Z +A Z +C Y +C X +C Z +C Z +C Z +A X +B Y +A X +C Y +C Y +A Z +A Z +B Y +A Y +A Z +A X +C Z +A Z +C Z +C Z +A Z +A X +A Z +A Z +A Z +C Z +C Z +A Z +C Z +A Z +B Y +A Z +C Z +A Y +B Y +B Y +C Z +A X +A X +C X +B X +B Y +C Z +B Y +C Z +C Z +B Y +C Z +A Z +A Y +C Z +C Z +C Z +B Y +C Z +C Y +C Z +A Z +A Z +B Y +A X +A X +C Z +B Y +C X +C Z +A Z +C Z +C Z +A X +A Z +A X +C Z +B Y +C Z +C Z +C Z +C Z +A Z +A Y +C Z +C X +A Y +A X +A X +A X +C X +A Z +B Y +B X +C Z +A Z +C Z +C Y +A Z +B Y +A X +A Z +A Y +C Z +A Z +A Z +A X +C Y +A Z +C Z +A X +B Y +C Z +A Y +C Z +C Z +B Y +A Y +C Z +A X +A X +A Y +C X +A X +C X +C X +C Z +A X +C Z +C Y +C Z +C X +B Y +C Z +C Y +A X +C Z +A X +B Z +A Y +A Z +C Z +C Z +C Z +C Z +A X +C Z +C Z +C Z +A Z +B Y +C Z +C X +B Y +A Z +C Z +B Z +C Z +A Z +C Z +A Z +B Y +A Z +C Z +C Z +C X +A X +A Z +B Y +C Z +A X +A Z +A X +B Y +C Z +A X +C Z +C Z +C X +C Z +C Z +C Z +A X +C Z +B Z +A Z +B Y +C Z +B Z +C X +C X +C Z +C Z +C Z +B X +C Z +C Z +C Z +A Z +B X +A Y +A Z +C Z +A Y +A Z +A X +A Z +A Y +A X +A Z +A Z +C Z +C Z +C Z +A Y +A X +A Y +B Y +C Z +B Y +C Z +C Z +A X +C X +A Z +C Z +B Y +A Z +C Z +B X +A Y +C Z +C Z +A Y +C Z +C Z +A X +C Y +C Z +A Z +A Z +A X +A Y +A Z +C Z +C Z +A Z +A X +C Z +A Y +B X +B X +A Z +A Z +C Z +A X +A X +C Z +C X +C Z +C Z +C Z +C Z +C X +C X +C Z +A Y +C Z +C Z +C Z +A X +B Y +A Z +C Z +A Y +A Y +A Z +C Z +C Z +A Z +A Y +A Z +C Z +C Z +B X +A X +C Z +C Z +A Z +C Z +A Z +C Z +A Z +A X +A X +A Z +A X +C Z +C X +A Z +C X +B Y +A X +A Z +A Z +C Z +A Y +A X +C X +A Z +C X +C Z +A X +C Z +C Z +B Y +B Y +C Z +C X +B Y +A Z +C Z +C Z +C Y +C Z +C Y +C Z +A X +A Y +B X +C Z +B Y +A Y +A X +C X +A Z +A Y +C Z +B Y +A Y +C X +A Z +A Y +A X +C Z +C Z +C Z +C Z +A X +A Y +B Y +C Z +C Y +A X +A X +A Z +A Z +A Z +A Z +A Z +C Z +A Z +C Y +A Y +A Y +B Y +A Z +A Z +A Y +C Z +C Z +A Z +B Y +B Y +C Z +B Y +A X +B Y +A Y +B Y +C X +B Y +A X +B Z +C Z +C Z +C Z +C Z +A Y +C Z +A Z +A Y +B Y +A X +C Z +B X +C Z +C Z +C Z +A Z +A Z +A Z +A X +C Y +A Z +B Y +C Z +C Z +C Z +A X +B Y +B Z +C Z +C Z +C X +A Z +A X +A X +C Z +A Z +A X +C Z +A X +A Z +A Y +C Z +A Y +C X +A Z +A X +A Z +C Z +B Z +A Y +A X +C X +C Y +B Y +A X +C Z +C Z +C Z +C X +C Z +C X +C Z +C Z +A Z +A Z +B Y +A Y +C X +A X +C Z +A X +C Z +C Z +B Y +A Z +A Y +B Y +A X +C Z +A Y +A Z +C Z +B Y +A X +C Z +B Y +C Z +A Z +B Y +C Y +C X +B Z +A Z +C Z +A Z +A Y +C Z +A Z +C Z +C Z +C Z +A Y +C Z +C Z +A Z +B Z +C Z +C Z +C X +A Z +C X +B X +C X +A Y +C Z +A Z +A Y +C X +A X +B Y +C Y +A Z +A Z +C Y +C X +A X +A Z +C Z +A X +A Z +C X +A X +B X +C Z +C Z +A X +C X +A Z +A Z +A Y +C Z +A X +B Y +C Z +A Z +C X +A X +C Z +B Y +A X +B Y +A Y +C Y +A Y +C Y +A X +A Z +C Z +B Y +C Z +C Z +B Y +A X +A Y +B Y +A X +B X +A Z +C Z +C X +A Z +A X +C Z +A Y +C Z +A Z +A Z +A Z +A Y +A Z +B Y +C Z +C X +C X +C Z +A Z +A Z +A X +B Y +C Z +A Z +C X +B X +C Z +C Z +A Z +C Z +C Z +A Z +B Y +A X +B X +B Y +A Z +A Z +A Z +A Z +A Y +C Z +C Z +C Y +B Y +B Y +B Y +C Z +C Z +A X +A Y +C Z +B Y +B Z +A X +C Y +C Z +A X +C Z +C X +A X +C Z +C Z +A Y +A X +A Z +A Z +A Y +C Z +A Z +C X +B Z +C Z +B Y +A Y +C Z +C Z +A X +C Z +C X +C X +A Z +A Y +A Y +B Y +C X +C Z +A Z +C X +B Y +A Z +C Z +A Y +C Z +A Z +C Z +A X +C X +A X +A X +A Y +B Y +C Z +C Z +A X +C Z +A Y +A Z +A Y +B Y +C Z +A Z +A Z +A Z +A Y +C Y +B X +A X +C Z +A Y +C Z +A Y +B Z +A X +C Z +A Z +C Z +A Z +A X +C X +A X +A X +A Z +A Z +C X +B Y +C Z +C Y +A Z +A Z +A Z +A Z +A Z +A X +B Z +B Y +A Y +C Z +A Z +B Y +A Z +C Y +A Y +A X +C Z +A Z +C Z +C Z +C Y +A Z +C Z +A X +A Z +A Z +B Y +C Z +C Z +C Z +C Z +C Z +C Z +C Z +B Y +C Z +C Z +A Z +C Z +B Y +C X +C X +C Z +C Z +C Z +A Z +B Y +A X +C Z +B Y +B Y +C Z +A X +C Z +C X +C Z +B Y +B Y +C Z +A Z +C Z +C X +B Y +C Z +A Z +C Z +C Z +C Z +C Z +A Y +C Y +A Y +C Z +C Z +A X +A Z +C Y +C Z +A X +B Z +C X +C Z +A Z +C Z +C X +C Z +C Y +A X +A Z +A Y +A X +B X +A Z +A Y +A Z +B Y +A Z +B Y +B Y +C Z +A Z +C Z +C Z +A X +A X +C Z +C Z +C Z +C Z +C X +A Y +C Z +C Z +A Z +A Y +C Z +A Z +B Y +C Z +C Z +C Z +C Z +A Z +B Y +B Z +B Z +A Z +A Y +A X +C Z +B X +C Z +B Y +A X +C Y +A Y +C Z +C Z +C X +C Z +C X +C X +A Z +A X +A Z +C Z +B X +A Z +C Z +C Z +A Z +A Y +C X +A X +C Z +A X +A Y +A X +A X +A Z +A Z +C Z +A Z +A Z +A Z +B Y +A Z +C Z +A Y +C Z +C Z +A Z +A Y +A Y +C X +A X +B Z +A Z +C Z +A Z +A Y +A X +B Y +B Y +A Y +A Z +A Z +B X +C X +A Z +C Z +C X +C Z +C Z +A X +C Z +C Z +B Y +A Z +A Z +A Y +A Z +A Y +C Z +C Z +C Z +C Z +B Y +B Y +A Z +C Z +A Z +A X +C Z +C Z +A Y +C Z +B Y +A X +A X +A Z +C Z +C Z +C Y +C Z +A X +C Z +A Z +C Z +B Y +A Z +C Z +B Y +B Y +C Z +A Y +C Z +C Y +A Z +A X +A X +C Z +A Y +C Z +A Z +C Z +A X +A X +A Z +A Z +C Z +B Y +C X +A Y +C Z +C Z +A X +C Y +A Y +C Z +C Y +A Z +B Z +C Z +A Z +B Y +B Y +A Z +C Z +A X +A Z +C Z +A Z +C Z +C Z +B Y +B Y +A X +B Y +A Z +C Z +A Z +A Z +C Z +A Y +C Y +C Z +A X +C Z +A Z +C Z +C Z +C Y +C Z +A Z +C Z +C Z +B Y +A Z +C Z +B X +B Y +A Y +C Z +A Z +B Y +A Z +C Z +C X +C Z +A Y +A Y +A Y +B Y +C Z +A Z +A Z +C Z +A Z +C X +A Z +A Z +A X +A Z +A Y +C Z +A Z +C Z +A Z +A X +C Z +C X +C Z +C Z +C Z +C Z +C Z +B Y +C Z +A Y +C Z +B Y +C X +C Z +C Z +C Z +B X +A X +C Z +C Z +C X +C Z +A Y +C Z +A Z +A Z +C Z +C Z +C Z +A Z +C Z +A X +A Z +C Z +A Z +C Z +A X +C Z +C Z +C X +A Z +C Z +C Z +C Z +C Z +A X +A Z +A X +C Z +B Y +C X +B Y +A Z +C Z +C Z +A X +A Z +A Y +A X +A Z +B Z +B Y +C Z +C Z +A Y +C Z +B Y +C Z +B X +A Z +C Z +A Y +A Z +A Z +B Y +C X +A Y +C Z +C Z +C Z +B Z +B Y +B X +A X +A X +C Z +C Z +C X +A Y +C Z +C Z +C Y +C Z +A Z +A X +C Z +B Y +C Y +A Z +C Z +A X +C Z +C Z +A X +A Y +C Z +A Y +C Z +A X +C Z +C Z +C Z +C Y +B Y +A Z +C Z +C X +B Y +A Y +B Y +C Z +C Z +A X +C Z +C Y +A Z +A X +A Y +C Z +B X +B Y +C Z +A Z +B Y +A Y +C Z +A X +B Y +A X +C Z +A Z +C Z +B Y +A Z +C X +B Y +A Y +A Z +A Z +A X +B Y +B Y +C Z +A X +C X +A Z +B Y +A X +B Y +C Z +A Z +A Z +C Z +C Z +A Z +A X +C Z +B Y +C Z +C Z +A Z +C Z +A Z +B Z +A Z +C Z +A Z +A X +A X +A X +A Y +C Z +C Y +C Z +C Y +A X +A X +A Y +C Z +A Y +C Z +C Z +C X +B Y +C Z +C Z +C Y +B Y +A X +B X +A Z +C Z +B Y +A Z +B Y +A Y +A Z +B Z +A Y +A Y +A X +A Z +A Y +B Y +C Z +A X +C Z +B Y +A Z +C Z +A Z +A X +B Y +C Z +A Z +A Y +C X +B Y +C Z +C X +A X +C Z +A Y +C Z +A X +B Y +C Y +C Z +A Y +C Z +A Z +A Z +A Z +C Z +C X +B Y +B Z +C Z +C Z +C Z +A Z +C Z +C Z +A Z +A Z +B Y +C Z +A X +A Y +A X +A Y +C Z +C Z +B Y +A X +A Z +A Z +A Z +C Z +B Z +C Y +C Z +B Y +C Y +C Z +A Z +C Z +C X +A Z +A Z +B Y +A Z +C Z +A Y +A X +A Z +A Y +C Z +C Z +B Y +B Y +C Z +C Z +C Z +C X +A Z +A Z +C Z +B Y +C X +B X +C Z +A Z +C Y +C Z +C Z +A X +C Z +C Z +C Z +A Z +A Y +C Z +B Y +C Z +A X +B X +C X +C Z +A Z +C Z +A Z +A Z +C Z +A Y +A Z +C Z +A Z +A Z +A X +C X +C X +A X +C Z +B Y +B Y +A Z +A Z +A X +A Y +B Y +C Y +A Z +A Z +C Z +A X +C Z +A Y +B Y +C X +A Y +C Z +C Z +C Z +A Z +A Z +C Y +A X +A X +A X +C X +C X +A X +C Z +A X +B Y +A Z +A Z +C Z +A X +A X +A X +C Z +C Z +C Z +A Z +C Z +A Z +A Z +A X +A Y +A Y +C Z +B Y +A Y +A Z +B Y +B Y +C Z +B Y +A Y +C X +A Z +A Y +C Z +C Z +A X +A Z +B Y +C Z +A Y +A Z +A Z +A Z +C Z +A Z +B Y +C Z +A Z +A Z +A Z +A Y +A X +B Y +A Z +A Z +B X +A Y +C Z +C Z +A Z +A Z +B Y +A Y +C Z +A Z +C Z +C X +C Z +C X +C Z +B Y +A Y +C Z +B Y +A X +B Y +B Y +A Z +C Z +A X +A X +C Z +A X +A Z +C Z +C Z +B Y +A Z +C Z +C Z +C Z +C X +A Z +A Z +C Z +A Z +C Z +C Z +C X +B Y +A X +A Z +A X +C Z +A Y +C Z +C Z +A X +C Z +B X +A Z +A Z +C Z +C Z +A Y +A X +A Z +A Z +C Z +C Z +C Z +C Z +C Z +B Y +A Y +A Z +C Z +C Z +C Z +C Z +C Z +C X +A Y +C X +C Z +C Z +A X +A Z +A Z +C Z +B Z +A Z +B Y +A Z +C Z +C Y +A Z +C Z +C Z +A X +C Z +C Z +B Y +A Y +B Y +C Z +A Z +B X +C Z +A Y +B Y +C Y +A Z +A Y \ No newline at end of file diff --git a/src/days/day02.cpp b/src/days/day02.cpp index 6dcccf1..fc8626f 100644 --- a/src/days/day02.cpp +++ b/src/days/day02.cpp @@ -1,11 +1,108 @@ #include "../aoc2022.h" +#define WIN 6 +#define DRAW 3 +#define LOSS 0 + +enum EGameMoves { + eRock = 1, + ePaper = 2, + eScissors = 3 +}; + +struct SGameMove { + EGameMoves move, losesTo, winsTo; +}; + +enum ERules { + eTheirRules, + eMyRules +}; + template struct SDay02 : public SDay { //Class constructor using SDay::SDay; + //Map to store the collection of alises and plays + std::map pairs; + std::map losingMoves; + + SGameMove rock{ eRock, ePaper, eScissors }; + SGameMove paper{ ePaper, eScissors, eRock }; + SGameMove scissors{ eScissors, eRock, ePaper }; + //Solutions to both days - Output part1() override final { return Output(); } - Output part2() override final { return Output(); } + Output part1() override final { + //'A' 'X' = rock and loses to paper + pairs['A'] = &rock; + pairs['X'] = &rock; // Means Lose + //'B' 'Y' = paper and loses to scissors + pairs['B'] = &paper; + pairs['Y'] = &paper; //Draw + //'C' 'Z' = scissors and loses to rock + pairs['C'] = &scissors; + pairs['Z'] = &scissors; //Win + + return playGame(eTheirRules); + } + Output part2() override final { + return playGame(eMyRules); + } + + int theirRules(const SGameMove *player1, const SGameMove *player2) { + + if (player1->losesTo == player2->move) + {//We Win + return (WIN + player2->move); + } + + if (player1->move == player2->move) + {//We Draw + return (DRAW + player2->move); + } + + //We Lose + return (LOSS + player2->move); + } + + int myRules(const SGameMove *player1, const SGameMove *player2) { + if (player2->move == EGameMoves::eRock) + {//We must Lose + return (LOSS + player1->winsTo); + } + if (player2->move == EGameMoves::ePaper) + {//We must Draw + return (DRAW + player1->move); + } + //We must Win + return (WIN + player1->losesTo); + } + + int playGame(ERules rules) { + this->input.clear(); + this->input.seekg(0, std::ios::beg); + std::string line{ "" }; + int score{ 0 }; + + SGameMove *player1, *player2; + + while (std::getline(this->input, line)) + { + player1 = pairs[line[0]]; + player2 = pairs[line[2]]; + + if (rules == eTheirRules) + {//part1 + score += theirRules(player1, player2); + } + else + {//part2 + score += myRules(player1, player2); + } + } + return score; + } + }; +