From 2590c67c636167a8d92e794ed41737a71fec2369 Mon Sep 17 00:00:00 2001 From: zv0n Date: Fri, 2 Dec 2022 06:24:38 +0100 Subject: [PATCH] 02 --- 2022/02/Makefile | 16 + 2022/02/input | 2500 ++++++++++++++++++++++++++++++++++++++++++++++ 2022/02/main.cpp | 172 ++++ 3 files changed, 2688 insertions(+) create mode 100644 2022/02/Makefile create mode 100644 2022/02/input create mode 100644 2022/02/main.cpp diff --git a/2022/02/Makefile b/2022/02/Makefile new file mode 100644 index 0000000..8960434 --- /dev/null +++ b/2022/02/Makefile @@ -0,0 +1,16 @@ +CXX ?= c++ +CXXFLAGS ?= -std=c++11 -Wall -Wextra -pedantic -O2 +PROJECT = rockpaperscissors + +all: ${PROJECT} + +${PROJECT}: main.cpp + ${CXX} ${CXXFLAGS} -o $@ $^ + +test: ${PROJECT} + ./${PROJECT} + +clean: + ${RM} *.o ${PROJECT} + +.PHONY: all clean test diff --git a/2022/02/input b/2022/02/input new file mode 100644 index 0000000..c08c4d1 --- /dev/null +++ b/2022/02/input @@ -0,0 +1,2500 @@ +A X +A X +A Z +B X +A X +B Z +A X +A X +A X +A X +C Z +C Y +A X +A X +A Z +C Y +A Z +B Y +C Z +A X +B Y +C X +C Z +C Y +A Y +B X +B X +A X +B X +A X +C X +B Z +C Y +A X +A X +C Z +A Z +A X +B X +B X +A X +B X +B Y +A X +A X +A Z +A Y +C Y +A Z +C Z +C Y +A Z +A X +B Z +A X +C Y +B Z +C Y +A X +A Y +C Y +A Z +B Z +A X +C Y +A X +A X +B X +C Y +A Y +A X +C Z +B Z +A X +B X +B Z +A X +A Z +A X +A X +A Y +A Z +A X +B X +A Z +A Z +C Y +A X +B Z +C Y +C Z +A X +A Z +A X +B Y +A X +C X +A X +A X +C Y +C X +A X +C Y +B Z +C Z +C Y +B Z +A X +C Y +B Z +A X +B Z +A X +B Y +A Z +B X +A X +A X +A X +C Y +C X +A Y +C Z +C Y +B Z +A X +A X +B X +A X +A X +A X +C Y +A X +A X +A Z +C Y +A Z +A X +A X +A X +C Y +A Y +A X +A X +C Z +C Y +B X +C Z +C Y +B X +C Y +A X +C Z +A X +B Y +C X +A X +B Y +B Y +A Z +A X +A X +C X +A Y +B Y +C Y +B Z +A X +A X +A Y +A X +A X +C Y +A X +C Y +C Y +C Z +A Z +A X +C Y +C X +C Y +A X +A X +C Y +A Z +A Y +A Y +B Z +B Y +B X +C Y +A X +C Y +C Z +A X +A Y +A Y +B X +C Y +A X +B Z +A X +C Y +B X +A Y +C X +C Y +A X +C Y +B Z +C Y +C Y +C X +B X +C X +C Y +B Z +C Z +C Y +A X +A Z +C Y +A Z +B X +C X +C Y +A Z +C Y +C X +A X +A X +A X +B Y +A X +A X +B Y +B Z +A X +A Y +A Z +B Y +A X +A X +A X +B Z +A X +C Y +A X +A X +B Y +A X +C Y +B X +C Y +A X +A X +C X +A Y +A X +B X +A X +C Y +C Y +C Z +A Y +B Y +B X +A X +A X +A X +C Y +A Y +A X +A Y +C Y +A X +A X +B Y +C Z +A Y +B Z +C Y +A X +C Z +B X +C Y +B Z +C Y +B Z +A Z +A X +A X +C Z +C X +A X +A X +C Y +B Z +B Y +A X +A X +A X +B X +B X +B Y +C Y +C Z +A X +C X +C Z +A X +A X +C Y +A X +A X +C Z +B Z +B Z +A X +B X +A Z +C Z +C Z +B X +B Z +B Z +C Y +A X +A Y +C Z +A X +A X +A X +A Y +A X +A X +A Z +C Y +C Y +A X +A X +A X +A Z +B Z +C Y +A Z +A X +B Y +A X +A X +C Z +A Z +A X +C Y +A Y +C X +B Z +C Y +C Y +A X +C Y +B Y +A X +A X +C X +B X +B Z +A Y +B X +B Z +B Z +A X +A Y +B Y +B Y +A Z +C Y +A X +A X +B Y +C X +A Z +B X +B Z +A X +A Y +C Y +B X +B Y +C Y +A X +B Y +B X +A X +C Y +B Y +B Z +B Y +C Y +C Y +B Z +C Y +B X +A X +A X +B Y +B X +B X +C Y +C Z +B X +A X +A Z +A Y +C Y +C Z +A X +A X +A X +C X +A Y +C Y +C X +A X +A X +A X +A X +B Z +A X +A X +A X +A X +A X +C Y +C Z +B Z +C Z +A Z +C Z +A X +B X +A Z +A X +A X +A X +A X +B Y +A Z +C Y +B Z +A Y +C Z +C X +B Z +C Z +C Z +C X +C Y +B X +C Y +C X +A X +A Y +A X +C X +A X +A X +C X +B Z +A X +A X +B X +C Z +A X +A X +B Y +A X +B Z +C Y +A Y +A Y +C Y +A X +A Z +C X +A X +C Y +A X +B X +C Y +A X +B Y +A X +A X +A X +C Y +C X +B X +A Y +A X +A X +A X +C Y +C Z +A Z +A X +C Y +A X +B Z +C Z +B X +B X +A X +A X +C Z +C X +A X +A Z +A X +C Y +A X +C Y +A Z +A X +C Z +C X +B X +B Z +C X +A Z +B X +C Y +B X +B Y +B X +A X +C Y +B Y +C Y +C Z +C Z +B Y +C Y +B Y +A Y +B Z +A X +B Z +C Y +A X +A X +A X +A X +C Z +C Z +C Z +A X +A X +C Z +C Z +A X +C Y +A Z +A Z +B Y +C Z +A Z +C Z +C Y +A X +B Z +C Y +C Z +A Z +C Y +A X +A X +A X +A X +B Z +B Z +A X +B Z +A X +A X +A X +C Z +C X +A X +C X +A Z +B X +A X +A X +A X +A Z +B Y +B Y +A X +C Y +A X +C Y +A X +A X +A Y +B X +A X +B Z +A X +C Y +C Y +A Z +A X +A X +B X +C Y +C Z +A X +A X +B X +A Y +A Z +C Z +A X +B Z +B Y +A Y +B Z +A Y +A X +C Y +A Z +A X +A X +A X +C Y +C Y +A Z +A Y +C X +A X +A X +A X +C Y +A X +B Z +C Y +B Y +C Z +A X +B Z +B Y +B X +C Y +C Z +B Y +C Y +C Y +C Y +A Z +A X +B Y +C Y +C Z +A Y +A X +B Z +C Y +A Z +C Z +A X +A Z +B X +C Z +A X +B Y +C Z +C Y +C Y +B Y +A Y +C Y +B Y +C Y +C Z +B X +A X +A X +A X +B Y +A X +A X +C Z +C Y +C Z +B Z +A X +B X +A Y +A Z +B Y +C Y +C X +A X +C Y +A Y +A Z +B Z +A Z +A Y +C Y +A X +C X +C Y +B Y +B Y +B Y +A X +C Z +A X +C Y +A Z +B Z +C Y +C Y +C Y +C Y +B X +A Y +C X +C X +A X +A Z +B X +A X +C Y +B X +C Y +B X +C Y +A X +A Z +C Y +A Y +A X +A Z +A X +B Z +A X +B Y +C Z +A X +B X +B X +A X +C Z +A X +C Y +A X +A X +B X +A X +C Z +A X +A Y +C Y +B X +B X +B Z +A X +A X +A X +A X +B Y +A Y +A X +C Z +C Y +C Z +A Z +A X +B X +C Y +A X +C Z +A Z +A X +A X +B X +A X +B Z +B X +A Y +A Z +A Y +A Z +A X +C Y +C Y +B X +C Y +B X +A X +B Z +C Y +A Y +C Y +C Y +A Z +B Z +B X +A X +B Z +C Y +C Y +C Y +A Z +A X +A X +C Y +B X +B X +A X +A Z +A X +A X +A Z +C Y +B X +A X +A Y +A X +B Z +A Z +C Y +A X +A X +A Y +A X +A X +A X +B X +B X +A Z +B Z +A Y +A X +B X +C X +A Z +B Z +C Y +B Y +C Y +B X +A X +C Z +B Y +A X +C Y +C Y +C Y +A Y +B Y +A Z +B Z +A X +A Y +C Y +C X +A X +C Y +C Y +A X +A X +A X +B X +B Z +A Z +A X +C Z +C Z +B X +C Z +A Y +A X +A Y +B Z +A Y +A X +C Y +B X +A X +B X +A X +C X +A X +B Y +A Z +C Y +A X +C X +B Z +A X +C Y +A Y +C Y +A X +B X +C Y +A X +B X +A X +A Y +C Z +A X +A X +A X +A X +B X +C X +A X +A X +C Y +C Y +A X +A X +A Y +C Y +A X +B Z +A Z +C Y +B X +A Y +A Z +A X +A X +C X +A X +B X +A X +C Y +B Z +B Z +A X +B Y +A X +B Y +B Z +B X +B Y +C Y +A X +C Y +A X +A X +A X +A Z +C Y +C Y +A Y +B X +A Z +A Y +A Y +A X +B X +C Y +A X +C X +C Y +C Z +A X +A Z +A Z +A Z +A X +C Y +A X +A Y +A X +C Z +C Y +C Y +B Z +B Z +B Z +A X +C Z +A Z +A X +A X +A X +B Z +B X +A X +B Z +B Y +C Y +C Y +A X +A X +C Y +C Y +C Z +B X +A X +A X +C Y +A X +C Y +A Z +C Y +A X +C Z +B Z +C Z +C Y +B Z +C Y +B X +B X +B X +C Y +A Z +A X +C Y +A Y +C Z +A Y +C Z +B Y +C Y +A X +A Y +A X +C X +C Y +C Y +C Y +C Y +A Y +C Y +B Z +C Y +A X +C Z +B Z +A Y +A X +B Z +A Y +A Z +A X +C Y +C Y +C Y +A Y +B X +C Z +A X +B Z +C Z +A X +B X +B Y +A X +C Y +B X +A Z +A Y +A X +A X +A X +B X +C Z +C Y +B Y +B X +C Y +A X +A X +C Y +A Z +C X +A X +A Z +A X +A X +C Y +A Z +A Y +A X +A Z +B Z +A X +B X +B X +B X +B X +C Y +B Y +A X +A Y +A Y +A Y +B Y +A Y +C Z +A X +A X +A X +A X +A Y +C Y +B X +A X +A X +A X +A Z +A X +A X +C Y +B Y +B X +B X +A X +A X +C Y +A Z +C X +C X +C Y +A Y +C Z +B Z +B X +A X +A X +C X +A X +C X +A Y +B X +A X +B X +B Z +B Z +B Z +A X +B Y +C Z +C X +B X +B Z +A X +A X +C Z +A X +A X +B Y +A X +C Y +C Z +B Z +B Z +A X +A X +A X +A X +B X +B Z +C Z +A Y +B X +A X +C Y +C Y +A Z +C Z +C Y +A X +C Z +A Z +C Y +C Y +A X +A X +B Y +B Z +A Z +A Y +A Y +A X +B X +A Z +C Y +C Y +B Z +B Z +B Y +C Y +B Y +A X +C Z +B Z +C X +C Y +A X +A X +B X +C Y +A X +A X +A Z +A Y +C Y +A X +A X +B X +B X +C Z +C Y +B X +C Y +B Z +A X +A X +C Y +A Y +B Z +B Z +A Y +A Z +A X +A X +A Z +C Y +A X +C Y +A Y +C Y +C Z +B X +B X +C Y +A X +B X +B Z +C Y +C Y +C X +A Y +C Z +A X +C Y +A Y +A X +A Y +A X +A X +A Y +B X +B Y +A X +C Z +C Y +C Z +A Z +B Y +C Y +C X +C Y +A X +C Z +A X +C Z +A X +B X +A X +A X +B X +A X +A Y +A X +C Z +C Y +A Z +B Y +A X +A Y +A X +C X +B X +B X +A Z +C Z +C Y +B Y +A X +B Y +A Z +A X +A X +A X +A X +C Y +C Y +B Y +C Y +B Z +A X +A X +B Z +B Y +C Y +C Y +C Z +C Y +A X +A X +C X +B Y +B X +C X +B X +B Y +A X +C X +C X +A Y +C X +A X +A Z +C X +B Y +C Y +B Z +B X +A X +A X +A X +B X +C Y +C Y +B X +A X +C Y +A X +A X +A X +C Z +A X +A X +C Z +A X +C X +C Y +C Z +A X +A X +C Y +A Y +A X +C Y +A Y +A X +A Y +A Z +A X +C Y +A X +C Y +A X +A Y +A Z +B X +B X +B X +B Y +C Z +B Z +C Y +B Z +A Z +A X +A X +A X +B X +C Y +B X +B Z +A Z +C Y +A Z +C X +A X +B Y +B Y +A Z +C Y +A X +A X +A X +A X +B Y +C X +A X +C Z +C Y +B X +A Y +A Z +A X +B Y +C X +B Z +B Y +A Y +A X +A X +A X +B Z +A X +C Z +A X +C Y +A X +B X +A X +A X +A X +A X +A X +A Z +A Y +A Y +A Z +B X +A Y +B Z +C Y +B Z +C Z +A Z +C X +C Y +B X +B X +B Z +A X +A X +A Z +A X +A X +C Y +C Y +A Z +C Z +A Z +B Z +C X +A X +C Z +C Y +A X +C Z +B Y +B Z +A Y +A X +C Y +A X +C X +A Z +A X +A X +A Y +C Y +C Y +A X +A X +C Y +B Y +B Z +C Y +C Z +A Z +A Y +C Z +B X +C Y +C Y +A X +A X +A X +A X +B Z +A X +C Y +A X +A X +B Z +A X +A X +A X +A X +B X +A X +C Y +A X +A X +C Y +A Y +A X +C Y +A X +A Z +B X +A Y +A Z +C X +C Y +A X +C Z +C Y +A Y +A X +A X +C X +A X +B Y +A X +C Z +A X +B Y +A X +C X +C Z +A X +C Y +C X +C Y +B Z +A Z +A Y +A Y +C Y +C Z +C Y +B X +C Y +A X +C Y +C Z +A Z +C X +A X +A Y +B Y +C Z +C Y +B Z +C Z +C Y +B Z +C Y +A X +B Z +B Z +C Z +C X +C Y +A X +C Z +C Y +A X +C Y +A X +C Y +A X +B X +C Y +A X +B X +A Z +B Z +A X +A Z +A Y +A X +A Y +A X +C Z +A Y +A X +C Y +B X +A X +B Z +C Y +B X +A X +C Y +A X +A Y +C Y +B X +C Y +A Y +C Y +C Z +B Y +C Y +A Y +C Y +B X +A X +A X +A X +A Z +A X +B Z +A X +C Y +A Z +B X +A X +A X +A X +A X +A Z +C Y +B Z +A X +B Y +C Y +C Y +B Y +C X +A X +A X +A X +B X +B X +B X +C X +B Y +B Z +C Y +C Y +B X +B Z +A Z +A Y +A X +A X +A X +C Y +A X +C Y +C Z +C Z +C Z +A Y +C Y +A X +A X +B Z +A Y +C X +A Z +A X +A X +A X +A X +A X +A X +A Z +C Y +C Y +A Z +A X +A X +A X +A X +B X +C Y +A X +B X +C Y +A Y +A Y +C Y +A X +A Y +B Z +A X +A X +C Y +C Y +A Y +A X +A X +A Z +B X +A X +C Y +A X +B X +C X +A X +A X +A X +A X +A X +C Y +B Y +C Y +C Z +A Y +A X +C Y +B X +B X +A X +A Y +B X +B Y +C Y +C X +C X +A X +A X +A X +A X +A Z +C Z +A X +A X +A X +A Y +B X +B X +A X +A X +A X +A X +C Z +C Y +A Z +C Y +B X +A X +C Y +C Z +A Z +B Y +A X +B Y +A X +A Z +C Y +C Y +C Y +A X +C Y +A X +A Z +B Z +B Y +A Y +C X +C Z +A Y +C X +A X +A X +C X +A X +A Y +A X +A Z +A X +A X +A X +C Y +A Y +A Y +B Z +A X +C Y +C Y +B Y +A Z +C Z +B Z +A X +A X +C X +A Y +A Y +C Y +C Z +B X +B X +C Z +B Z +A X +C Z +A X +A Z +C Z +C Y +B Z +B Y +C Z +B Z +C Y +B X +C Y +A Z +C Y +B X +C Z +A Z +A X +B X +B Y +B Z +B Z +B X +C Y +A X +C X +A X +B X +B Z +A Z +A X +A Y +B Y +A X +C Y +A Z +B X +A Y +B X +A X +B Z +A X +C X +A X +C Y +B X +B Z +B Z +A X +A Z +B Y +A X +A X +B X +C Y +C Z +A X +A X +A X +C Z +C Y +A Z +B X +A Z +C Y +A X +A X +A Z +B X +C Y +A X +A X +A X +A X +B Z +A X +A Z +A X +C Y +C X +C Y +A X +B X +B Z +A X +C X +A X +A Y +A X +C Z +C Y +C Y +C Y +B X +B Z +C Y +A X +A Y +C Z +A X +C Y +B Y +B Y +A X +A X +A X +A X +C Y +B Z +C Z +C Y +A Y +B Y +C Y +A X +B X +A Y +C X +C Y +C Y +A Z +C Y +C Z +C Y +B X +C Y +B X +B X +C Y +B Z +A X +A X +B X +C Y +A Y +B Y +A X +A X +B Y +C Y +A X +B X +A X +A Y +B X +C Y +A Z +A X +C Y +A X +B Y +A Z +C Y +B Z +A Z +B Z +C X +A X +A Z +B X +B Y +A X +A Y +B X +C Y +C Y +C Y +C Y +A Z +C Z +A X +B Y +C Z +A X +C Y +B Y +C Z +C Y +A Z +A X +C Y +C Y +C Z +A X +C Y +B Y +B Z +B X +A X +C Z +C X +A Y +B X +A X +A X +A X +C Z +C Z +A Y +C Y +B Y +C X +B X +C X +A X +A X +B Y +A X +A X +C X +A Y +A X +C Y +A Y +B X +C Y +A X +C Z +A Z +A Y +A X +A Y +B Y +A X +A X +C Z +A Y +C Y +B Z +C Y +B Z +A X +B Z +B Z +A Y +B Z +B X +C X +A X +A X +B Y +A X +A X +A X +A X +B X +C Z +A X +A Y +B X +C X +C Y +A X +A X +C Y +A X +A X +C Z +C Z +B X +A Z +B Z +A X +A X +C Y +A Y +A X +A Z +A Y +C Y +A X +C Y +B X +A X +A X +A X +A Z +A Z +A X +B Z +A Z +C Z +B Y +A X +C Y +B Z +C Y +A X +B X +C Y +A X +C Y +A Z +A X +A Y +B X +C X +B X +A X +C Y +C Y +B X +B X +C Y +A X +A Y +B Y +A X +C X +C Y +A Y +C Y +C Z +A X +B Y +A Y +A X +A Z +A Y +C Y +A X +A X +B Z +B Y +B Y +A X +C Z +A Y +A X +B Z +C Z +B Z +A X +B X +C X +A X +A X +A X +A X +A X +C X +A X +A Z +A X +C Z +A X +A X +B Z +A Z +B Z +A Y +A X +C Y +A X +B Y +C Y +B Z +B Z +A X +B Z +C Y +B Z +A Z +B Y +B Z +B X +B Y +A X +B X +A X +C X +B Y +B Y +B X +B Z +C Y +C Y +B Z +A Z +A X +A X +C Y +A X +A X +A Y +A X +B Z +A X +A X +B Z +B Z +A X +A Z +A X +A X +A X +A Z +A Z +C Z +C Y +A Y +A X +C Z +C Z +B Y +B X +B Z +C Y +A X +B Z +A Z +A X +A X +C X +A X +C Y +C X +A Z +A Y +B Z +C Z +B Y +B X +C Z +A Z +B X +A X +A X +A X +A Z +B Y +B Z +A X +A Y +C Y +A X +A X +C Z +B Z +C Y +C X +C Y +C Y +B Z +A X +B X +A X +A Z +B Z +A X +B X +C Y +C Y +B Y +A X +A Y +C X +B X +C Z +B X +A X +C Y +A X +C Y +A X +B Z +C Y +B Z +A Z +A Z +C Z +C Y +A Z +C Y +A Z +C Y +B X +A X +B X +A X +C Y +C X +C Z +A X +A X +A X +B Y +A X +B Z +A X +A X +A X +C Y +C Y +A X +B X +C Y +A Z +A X +C Y +B X +C Z +C Y +C X +B X +A X +C X +C Y +A Y +B Z +B Y +B X +C Y +C Z +B Y +A X +C X +A X +B X +C Z +A X +A X +C Y +A Z +A X +C Y +A Z +C X +A X +C Y +A Z +A X +A X +A Y +A X +C Y +A X +C Y +A X +A Y +C Y +C Y +B Y +B Y +B Z +A X +B X +B Z +B X +A X +B X +A X +A X +A X +A X +C X +B X +B X +A X +A Y +A X +B Y +A X +A Z +B Z +A Y +A X +A X +C Y +B Z +C Y +A X +C Y +A X +C Y +B X +A Z +B X +A X +A Z +B Y +B Y +C X +C Y +A X +B X +C Z +C Z +A Y +A X +C Z +A X +A X +C Z +B X +C Y +A X +C X +C Z +C Z +B Z +A X +A X +A X +B X +A Y +B Z +A X +B Y +A Z +A X +B Z +B Y +B X +A X +A Y +C Z +A X +C Y +C Y +A Y +A Y +A Y +C Z +C Y +B X +A Y +A Z +A Y +A X +C Z +C Y +C Y +C X +B Y +A X +A X +A X +C Y +B Y +C X +C Y +A X +A Z +B Z +B Y +B Z +B Z +B X +A X +B Z +C Y +C Y +C Y +A X +A X +B Y +B Z +B Y +C Y +B Y +A X +C X +A Z +C Y +C Y +B X +A Y +A X +C Y +A Y +A Z +B X +C Y +C Z +A X +C Y +B X +B Y +A X +A X +A X +B Z +A X +C Z +C Y +B X +C Y +C Y diff --git a/2022/02/main.cpp b/2022/02/main.cpp new file mode 100644 index 0000000..139c85e --- /dev/null +++ b/2022/02/main.cpp @@ -0,0 +1,172 @@ +#include +#include +#include +#include + +enum RockPaperScissors { + Rock, + Paper, + Scissors +}; + +enum MyStrategy { + X, + Y, + Z +}; + +using BattleInput = std::pair; +using Battle = std::pair; +std::vector getInput( std::ifstream &file ) { + std::vector ret{}; + char tmp = 0; + std::string str; + RockPaperScissors opopnentStrategy = Rock; + MyStrategy myStrategy = X; + while ( std::getline( file, str ) ) { + std::stringstream ss( str ); + ss >> tmp; + switch(tmp) { + case 'A': + opopnentStrategy = Rock; + break; + case 'B': + opopnentStrategy = Paper; + break; + case 'C': + opopnentStrategy = Scissors; + break; + default: + std::cerr << "Invalid oponent strategy: '" << tmp << "'" << std::endl; + exit(1); + break; + } + ss >> tmp; + ss >> tmp; + switch(tmp) { + case 'X': + myStrategy = X; + break; + case 'Y': + myStrategy = Y; + break; + case 'Z': + myStrategy = Z; + break; + default: + std::cerr << "Invalid player strategy: '" << tmp << "'" << std::endl; + exit(1); + break; + } + ret.push_back( {opopnentStrategy, myStrategy} ); + } + return ret; +} + +std::vector battleStrategy1(const std::vector &battleInput) { + std::vector battle; + for(auto &input : battleInput) { + switch(input.second) { + case X: + battle.push_back({input.first, Rock}); + break; + case Y: + battle.push_back({input.first, Paper}); + break; + case Z: + battle.push_back({input.first, Scissors}); + break; + } + } + return battle; +} + +RockPaperScissors getLosingShape(const RockPaperScissors &oponent) { + switch(oponent) { + case Rock: + return Scissors; + case Paper: + return Rock; + case Scissors: + return Paper; + } +} + +RockPaperScissors getWinningShape(const RockPaperScissors &oponent) { + switch(oponent) { + case Rock: + return Paper; + case Paper: + return Scissors; + case Scissors: + return Rock; + } +} + +std::vector battleStrategy2(const std::vector &battleInput) { + std::vector battle; + for(auto &input : battleInput) { + switch(input.second) { + case X: + battle.push_back({input.first, getLosingShape(input.first)}); + break; + case Y: + battle.push_back({input.first, input.first}); + break; + case Z: + battle.push_back({input.first, getWinningShape(input.first)}); + break; + } + } + return battle; +} + +int getBattleScore(const Battle &battle) { + int score = 0; + if(battle.second == getWinningShape(battle.first)) { + score += 6; + } else if (battle.first == battle.second) { + score += 3; + } + switch(battle.second) { + case Rock: + score += 1; + break; + case Paper: + score += 2; + break; + case Scissors: + score += 3; + break; + } + return score; +} + +uint64_t part1Func(const std::vector &input) { + uint64_t score = 0; + auto battles = battleStrategy1(input); + for(auto &battle : battles) { + score += getBattleScore(battle); + } + return score; +} + +uint64_t part2Func(const std::vector &input) { + uint64_t score = 0; + auto battles = battleStrategy2(input); + for(auto &battle : battles) { + score += getBattleScore(battle); + } + return score; +} + +int main() { + std::ifstream input_file( "input" ); + auto battleInput = getInput( input_file ); + auto part1 = part1Func(battleInput); + std::cout << "With the first strategy, you get score of \033[91;1m" << part1 + << "\033[0m." << std::endl; + int part2 = part2Func(battleInput); + std::cout << "With the winning strategy you get score of \033[91;1m" << part2 + << "\033[0m." << std::endl; +}