diff --git a/2022/2/data.txt b/2022/2/data.txt new file mode 100644 index 0000000..b955ddb --- /dev/null +++ b/2022/2/data.txt @@ -0,0 +1,2500 @@ +A Z +A Z +A Z +B Z +C X +A Z +A Z +C Y +A Z +A Y +B Y +A Z +C X +A Z +A Z +A Z +A Z +A Y +A Z +A Z +C Y +C X +C X +C X +A Z +A Z +B Y +A Z +A Z +C Z +B Z +A Y +A Z +B Y +A Z +B Y +A X +B Z +A Z +A Z +A Z +C X +C X +A X +A Z +A Z +C X +A Z +B Y +A Z +B Z +A Z +A Z +B Z +B Z +C Y +B Z +A X +B Z +A Z +B Y +A Z +B Z +C X +A Z +B Y +B Z +A Z +B Y +C X +B Y +A Z +A Z +A Z +B Y +A Z +A Z +B Y +B Z +C Z +A X +A Z +A Z +C Z +C X +A Z +C X +A Z +A X +A Z +A Z +A Z +B X +B Y +A Z +A Z +A Z +C Y +B Y +C X +C X +A Z +A Z +A Z +A X +C X +B Z +C X +C X +A Z +A Z +A Z +A Z +B Z +A Y +A Y +C X +A Y +C X +B Y +A Z +C Z +A Z +B Y +A Z +C X +B X +A Y +C X +A Z +A Z +A Y +B Z +C X +C X +C X +B Y +A Z +A Z +B Y +A Z +B Z +C X +C Z +A Z +C X +B Z +A Z +B Y +C X +A Y +B Y +C X +C X +A Z +A Y +A Z +A Z +A Z +A Y +C X +A Z +A Z +B Z +A Z +B Z +A Z +C Z +C Z +A Z +A Z +B Z +A Z +B Z +A Z +B Z +B Y +B Y +B Z +B Y +A Z +A Z +A Z +A Z +A Z +A Z +A Z +A Z +C X +C X +A Z +A Z +C Y +A Z +C Y +B Y +C X +B Z +A Z +A Z +C X +A Z +B Y +A Z +A Z +A Z +B Z +A Z +B Y +A Z +B Y +A Z +A Z +C Z +A Z +C X +C Y +C X +C Y +C X +A Z +B Z +A Z +A Z +A Z +A Z +A Z +B Y +A Z +C X +C X +A Z +A Z +C Z +C Z +A Z +A Z +A Z +C X +A Z +A Z +A Z +A Y +A Z +C X +A Z +A Z +A Z +C X +C X +A Z +C Y +A X +A Z +A Z +A Y +B Z +A Z +A Z +A Z +C X +A Z +A Z +A Z +B Z +B Z +A Y +B Z +C X +B Y +A Z +A Z +A Z +A Z +A Z +A Z +B Z +C X +A Z +A Y +A Z +B Y +B Z +C Z +A Z +A Y +A Z +B Z +A Y +C X +A Z +A Y +A Z +C Y +A Z +A Z +B Y +C X +A Z +A Z +A X +A Z +C X +A Z +B Y +A Z +C X +A Z +B Y +A Z +C Y +B Z +C X +A Z +C X +B Y +A Z +C X +A Z +B Y +A Z +A Z +C Z +A Z +A Y +A Z +A Z +C X +A Y +A Z +B Z +A Z +A Y +C X +A Z +B Y +A Y +A Z +A Z +A Z +A Z +A Z +A Z +B Z +B Y +B X +C Y +B X +A Z +A Y +C X +A Z +A Z +C X +C Y +A Y +A Z +C X +B Y +B Y +C X +A Z +C Y +A Z +A Z +A Z +A Z +B X +A Z +A X +B Z +C Z +A Z +A Z +A Y +A Z +A Y +A Z +A Z +B Y +A Z +A Z +A Z +C X +A Z +A Z +A Z +B Z +A Z +A Z +A Z +A Z +A Z +B Z +A Z +A Z +C X +A Z +A Z +A Z +A Z +A Y +A Z +A Z +C Z +A Z +A Y +B Y +B Z +A Z +B Y +B Z +A Z +C X +A Z +B X +A Z +A Z +A Y +A Z +B X +B Z +A Z +B Z +A Y +A Z +A Z +A Z +B Y +A Z +B Z +A Z +B Z +A Z +A Y +A Z +B Z +A Z +C X +C X +A Z +A Z +B Z +A Z +A Z +C X +A Z +A X +A Z +A X +C X +A Y +C Y +B Y +A Z +A Y +A X +A Z +A Y +A Z +A Z +A Z +C X +B Z +A Z +B Y +A Z +A Y +A Z +A Z +B Z +C X +A Z +A Z +A Y +C X +C Y +B Z +A Z +A Z +B Z +C X +A Z +A Z +A Z +C Y +A Y +A Z +B Z +B Z +A Z +B Z +A X +A Z +B Z +A Z +A Z +B Y +A Z +A Y +B Y +A Z +B Z +C X +C Y +A Z +B Z +C X +A Z +B X +A Z +A Z +C X +A Z +A Y +B Z +B Y +A Z +A Y +C Y +A Z +C X +B Z +A X +A Z +A Z +A Z +A Z +A Z +A Z +A Z +A Y +A Z +A Z +C X +B Y +B Z +C X +C X +C X +A Z +A Z +B Z +B Y +A Z +A Z +B Y +B Y +A Y +A Y +A X +A Y +B Y +A Y +C X +A Z +A Z +A Z +A Y +B Y +A Z +C Y +B Z +C X +A Y +A Z +C Z +A Z +B Z +C X +B Z +C X +B Z +B Y +B Y +C X +A Z +A Z +B Z +B Z +B Z +A Z +A Z +A Z +A Z +A Z +C X +C X +C Y +B X +C X +A Z +A Z +A Z +A Z +A Z +A X +A Z +C X +A Z +C Z +A Z +C X +C Z +A Z +A Z +A Y +B Z +A X +A Z +A Z +A Z +C X +B Y +A Z +B Y +A Z +B Y +A Z +C X +A Z +C X +A Z +A Z +A Z +A Z +A Z +B X +B Y +C X +C X +A Z +C X +A Z +A Z +A Z +A Y +A Z +A Y +A Z +A Z +A Z +C Y +A Z +A Z +B Z +B Y +C X +A Y +A Z +B Z +A Z +A Z +A Z +B Y +C Z +A Y +C Y +A X +A X +B Z +A Y +C X +C X +B Z +A Z +B Z +A Z +A Z +A Y +B Z +C Y +A Z +A Z +A Z +C X +B Y +A X +A Z +C X +A Z +B Z +B Y +C X +B Y +A X +A Z +A Z +A Z +A Y +A Z +A Z +A Y +A Y +A Y +A X +A Z +A Z +B Z +A Y +A Z +C X +C X +A Z +A Z +B Z +B Y +A Z +A Z +C X +A Y +C X +B Z +A Z +A Z +A Z +A Y +A X +C Y +C X +C X +A Z +A Y +A Z +A Z +A Z +C X +A Z +A Z +B Z +C X +C X +B Z +B Z +C X +A Z +B X +A Z +B Z +A Y +A Z +A Z +C X +A Z +C Z +A Z +B Z +C X +A Z +B Y +A Y +A Z +A Z +B X +C X +B Z +C X +C X +C Y +B Z +C X +A Y +C X +A Z +A Z +A Z +A Y +A Z +C X +C Y +A Z +A Z +B Z +A Z +B Y +A X +A X +B Z +C X +B Y +A Z +C X +A Z +B Z +A Z +B Y +B Y +A X +B Y +A Z +A X +A Z +C X +A Z +A Z +B Y +C Y +A X +A Z +C Y +C X +A Z +A Z +A Z +A Y +A Z +C X +A Z +B Y +A Z +B Z +B Z +C X +B Y +A Z +C Y +A Y +A Z +A Z +C X +A Z +A Z +A Z +A Z +B Y +B Z +A Z +A Z +C Y +A Z +A Z +A Z +A Z +A Y +A Z +A Z +C Y +B Y +B Z +A Z +B Z +A Z +B Z +A Z +A Z +A Y +A Z +A Z +B Z +C Y +A Z +B Z +A X +C X +C X +A Z +A Z +A Z +A Z +A Z +C X +A Z +C X +A Z +B Y +A Z +C Y +A Y +B Z +C X +A Y +A Z +A Y +A Z +B Z +B Y +A Y +B Z +A Z +A Z +C Z +C Z +A Y +A Z +A Z +C X +A Z +A X +C Y +C X +A Z +A Z +B Y +B Z +C Y +A Z +B Z +A Z +C Z +A Z +A Y +B Y +C X +A Z +A Z +A Z +C X +A Z +A Y +A Z +A Z +B Z +C X +C X +C X +A Z +A Z +A Z +C X +A Z +A Z +A Z +A X +A Z +C X +C X +B Z +A Z +A Z +A Z +B Y +A Z +C X +A X +B Z +C X +A Z +C X +A Y +A Z +A Z +A Y +A Z +A Y +A X +C X +A Z +A Y +B Y +A Z +A Y +C Z +B Y +A Z +A Z +A Y +A Z +C X +A Z +B Y +B Z +B Z +A Z +A Z +A Z +C X +A Z +B Y +B Y +A Z +A Y +C X +A Z +C X +A Z +C X +C X +A Y +B Z +A Z +A Z +A Z +A Y +A X +B Y +A Z +B Z +B Y +C Y +C X +C Y +A Z +B Z +A Z +A Y +B X +C Z +A X +A Z +A Z +A Z +A Y +A Y +A Z +A Y +C X +A Z +A Y +C X +A Z +A Z +C Y +A Z +B Z +A Y +B Z +B X +B Z +C X +A Z +A Z +C X +A Z +A Z +C X +B Z +B Z +B Z +A Z +A Z +B Y +A Z +A Z +C Z +C Z +B Z +A Z +B Y +A Z +A Z +C X +B Z +A Z +A Z +A Z +C Y +B Y +C X +A Z +A Z +A Z +A Y +A Z +C X +A Z +C X +A Z +A Z +C Y +C X +C X +C X +C X +C X +B Z +B Z +B Y +B Y +C Z +A Z +B Z +A Z +A X +A Z +A Z +A Z +C X +A Z +C X +A Z +A Z +C X +C X +B Y +A Z +C Y +A Z +A Y +C Y +B Z +B Y +C X +A Z +C Y +A Z +A Z +A Z +B Y +C X +B Z +B Z +C X +B Y +B Z +A Z +C X +A Z +B Y +B Z +A Y +A Z +A Z +A Z +A Z +C Y +A Z +C Y +A Z +B Y +C X +B Z +A Z +A Z +B Z +C X +B Z +A Z +A Z +A X +B Y +A Z +A Z +A Z +A Z +A Y +B Z +A Z +A Z +A Z +B Z +C Y +C X +C X +B Z +A Z +B Z +C X +A Y +C X +B Y +B Z +C Y +B Y +B Y +A Y +C Y +A Z +A Z +B Z +B Z +A X +A Z +A Z +B Z +A Z +B Z +A X +A Z +A Y +A Y +A Z +B Z +A Z +B Z +A Z +B Z +C X +A Z +A Z +C X +A Z +A Z +A Z +C X +B Y +A X +B Z +B Z +C Y +A Z +A Z +C X +B Y +C X +A Z +A X +A Z +A Z +A Z +A Z +A Z +A Z +A Z +A Z +A Z +C X +B Z +B Z +C X +A Y +C Z +A Y +A Z +C Y +A Z +A Z +A Y +A Z +C X +C Z +A Z +A Y +A Z +A X +A Y +A Z +C X +B Z +A Z +B Z +C Y +C X +A Z +A Z +A X +A Z +B Z +C X +A Z +B Y +A Z +A X +A Z +B Z +A Z +A Z +C X +B Z +B X +A Z +A Z +C Z +A Z +A Z +A Y +B Z +A Z +C X +B Z +A Z +C Y +A Z +B Z +B Z +A Z +A Z +C X +B Z +C Y +A Y +A Y +B Z +A Z +A Z +C Z +B Z +A Y +A Y +C Z +C Z +A Z +B Z +B Y +A Z +B Y +A Z +A Z +A Z +C Y +A Y +A Z +A Z +A Z +A Z +C Z +A Z +B Y +A Z +B Z +C Y +A Z +B Y +B Z +A Z +A Y +A Z +A Z +B Z +A Z +A Z +A Z +C Z +B Z +C X +B Z +A Z +A Z +A Y +A Z +A Z +A Z +A Z +C Y +A Z +A Z +A Z +A X +A Y +B Y +C X +A Z +A Z +B Y +A Z +C X +A Y +A Z +A Z +C X +A X +A Z +A Z +A Z +B Y +B Z +A X +A Z +C X +A Z +C X +B Z +B Y +A Z +B Y +A Y +A Z +A Y +A Z +B Y +C X +B X +B Y +C X +A Z +A Z +A Y +A Z +A Y +B Z +B Y +B Y +A Y +A X +A Z +C X +A Z +B X +A Z +A Z +C X +B Y +B Z +B Z +B Y +B Z +A Y +C X +C Z +A Z +A Y +B Y +B Y +A Z +A Y +C Y +B Y +B Z +A Z +A Y +A Z +B Z +A Z +A Z +A Z +A Z +B Z +A Y +C X +A Z +A Z +B Y +A Z +B Y +B Z +A Z +C X +A Z +C X +B Y +A Z +B Z +C X +A Z +A Z +A Z +C X +C X +A Z +A Z +A Z +B Y +A Z +A Z +A Z +A Z +A Z +A Y +B Z +C Y +A Y +C X +A Z +A Z +B Y +B X +A Z +C Z +A Z +A Y +A Z +A X +A Z +A Z +A Z +C Z +C X +C X +B Y +C X +C X +B Y +C Z +C X +C X +A Y +A Z +C X +C Z +B Y +A Z +C X +C X +A Z +A Z +A Z +A Y +A Z +A Y +B Z +A Z +A Z +A Z +A Z +A Z +A Z +C X +C X +C X +C X +A Z +A Z +B Z +A Y +A Z +A Z +B Z +A Z +A Z +A Z +A Z +A Z +C X +C X +A Z +A Z +C X +C Z +C Z +A Z +A Z +B Y +B Z +A Z +A Z +B Y +B X +C X +B Y +C X +C X +A Z +C X +C X +C Y +C X +C X +C X +B Z +B Z +A Z +A Z +B Z +A Z +C X +A Z +B Y +A Y +A Z +C Z +B Y +B Z +B Z +A Z +C X +B Z +A X +B Y +A Y +B Y +B Z +A Z +A Z +A Z +A Z +A Z +A Z +C X +C X +B Z +A Z +B Y +A Z +B Z +A Z +B Y +A Z +A X +A Z +B Y +B Y +A Y +C X +A Z +A Z +C Y +A Z +A Z +B Z +C Z +B Z +A Z +A Z +C X +C Y +B Z +A Z +C X +A Z +C X +B Y +C X +B Z +A Z +A Z +C X +A Z +C X +A Y +C X +C X +C Y +B Z +C X +B Z +C X +A Z +A Z +C X +A Y +B Z +C X +B Z +C X +A Z +C X +C X +A Z +A Z +B Y +C Z +A X +A X +A Z +C X +A Z +A Z +A Z +A Y +A Z +A Z +A Z +A Z +B Z +C X +B Y +A Z +A Z +B Y +A Z +A Z +A Z +A Z +B Y +A Z +B Z +A Y +A Y +A Y +A Z +A Y +A Z +B Z +A Z +B Y +A Z +C X +A Y +C X +A Z +B Y +A Y +A Z +A Y +A Z +C Z +A Z +B Z +A Z +C X +B Z +A Z +A Z +C X +B Y +A Z +C X +C Y +A Z +B Y +A Z +B X +B Y +B Y +C Z +C X +A Z +C X +A Y +A Y +B Z +A Z +C X +B Z +A Z +A Z +A Y +C X +C X +A Z +A X +B Z +A Z +A Z +A X +A Z +C X +A Z +B Y +A Z +B X +B Y +A Y +C X +A Z +A X +A X +A Y +B Y +A Y +A Z +C X +B Z +A Z +A X +A X +A Z +C X +B Z +C X +B Y +A Z +C X +A Y +A Z +A Z +A Z +A Z +C Z +B Z +C Z +A Z +A Z +C X +B Y +A Y +B Z +C X +B Z +A Z +A Z +A Z +A X +B Y +C X +B Y +B Z +B Z +A Z +A Y +C Y +A Y +A X +A Z +C X +A Z +A Z +A X +A Z +A Z +C X +A Z +A X +A Z +C Y +A Z +B Z +A Y +A Z +C Z +A Y +A Y +B Z +A Y +A Y +A Y +A Z +A Z +A Z +A Z +C X +A Z +A Z +A Z +A Z +A Z +A Z +A X +A Z +A Z +A Z +A Z +A Z +A Y +B Z +A Y +A Z +C X +A X +B Z +A Z +A X +C Y +B Y +B Y +B Z +C X +C X +A Z +A Z +C X +C X +A Z +A X +A Z +A Z +A Z +A X +C X +C X +A Z +A Y +A Z +A Z +A Z +A Z +C Z +A Z +C X +B Z +C Z +C X +A Z +B Y +C X +C X +B Z +C X +B Y +A Y +B X +A Z +A Z +A Z +B Z +C X +A X +B Z +A X +A Z +C Z +B Z +A Z +A Z +C X +C X +A X +C X +C Y +A Z +A Z +A Z +B Z +C Z +A Z +A Z +A Z +A Z +A Z +B Z +A Z +A Z +C X +B Y +A Z +B Z +A Z +C X +A Z +A Z +A Z +B Z +C X +B Y +A Z +A Z +A Z +C Y +A Z +A Z +C X +C X +A Y +B Z +A Z +C Y +C X +A Z +A Z +A Z +C X +A Z +A Z +B Z +B Z +A Z +A Z +A Z +C X +C X +A Z +B Z +A X +B Y +C X +C X +C X +A Z +C X +A Z +A Z +B Y +A Y +B Z +B Z +A Z +A Z +C Z +A Y +A Y +A Z +A Z +C X +C Z +A Z +A Z +A Z +A Z +C Y +B Y +B Y +C Y +A Z +C X +B Z +A X +A Y +B Z +A Z +A Z +A Z +A X +A Z +A Z +A Z +A Y +C Z +A Y +C X +A Y +A X +C X +A Z +B Y +A Y +B Y +A Z +C X +C Z +A Z +C Z +A Y +A Z +A Z +B Z +B X +B Z +B Z +B Y +C Z +C X +A X +C Z +B Z +A Z +A Z +B Z +A Y +A Z +B Y +C X +A Z +B Z +C X +A X +B Z +A Z +A Z +C X +C X +C X +B Z +C Z +A Z +C X +A Z +A Z +A Z +A Z +C Z +C X +A X +B Y +A Z +C X +C Z +A Z +C X +B Z +B Y +A Z +C X +A Z +B Z +C Z +A Z +A Z +A X +B Y +C X +A Z +C X +A Z +A X +C X +A Z +C X +A Y +A Z +C X +C Z +C Y +B Z +B Z +A Y +B Z +A Z +A Z +A Y +A Z +C X +C X +A Z +A Z +C X +B Z +A Z +B Y +A Z +A Z +A Z +C X +A Z +A Y +B Y +A Z +C X +A Z +A X +A Z +A Z +C X +C Y +A Z +C X +A Z +A Y +C X +B Z +C Z +B Y +A Z +A Z +B Y +A Z +B Y +A Z +A Z +A Z +C X +A Y +C X +A Z +C Y +A Z +A Z +A Z +B Y +B Z +B Z +C Z +A X +A Z +A Z +C X +A Z +C X +A Z +A X +C Z +C X +A Z +A Z +A Z +A Z +B Z +A Z +A Z +C Y +A Y +A Z +C Y +C Y +A Z +B Z +A Z +B Z +A Z +B Z +C Y +C X +C X +A Y +A Z +B Z +C X +A X +A Z +A Z +A Y +A Z +A Z +A Z +C X +C X +A Y +A Z +A Z +C X +B Z +B Y +A Y +A Z +B Z +A Z +A Z +A X +A Z +A Z +B Y +A Z +A Y +B Z +C X +A Z +A Z +A Z +C X +A Z +B Z +B Z +A Z +A Z +A Z +A Z +B Z +A Z +A Z +A Z +A Z +C X +C X +A Z +B X +A Z +B Y +C Z +A Z +A Z +A Z +C Z +A Z +B Y +A X +A Z +C Z +A Z +C Z +A Z +C X +A Y +C X +C Z +A Y +A Z +A Z +C X +C X +A Z +A Z +A Z +B Z +B Z +A Y +B Y +C Z +B Z +B X +A Z +A Z +A Z +C X +B Y +A Z +B Z +C X +A Z +A Z +C X +C X +A Z +A Z +A Z +A Z +B Z +A Z +A Z +A Z +A Z +A Z +B Z +A Z +A Z +B Z +A Y +A Z +B Y +A Z +A Z +A Z +B Z +A Z +A Z +C X +B Y +C X +A Y +C X +A Z +A Z +A Z +C X +B Z +A Z +A Z +A Z +A Z +A Z +C X +A Z +A Z +A Z +A Z +A Z +A Y +C X +B Y +C X +A Z +A Z +A Z +A Z +A Z +B Y +A Z +C X +A Z +A Z +A Z +A Z +A Z +A Z +A Z +C X +A Z +C X +A Y +B Z +A Z +C X +A Z +C X +B Z +B Z +A Z +A Z +A Z +C X +A Z +B Z +B Y +C X +C X +C X +B Z +A X +A Y +A Z +A Z +A Z +A Y +A Z +A Z +A Y +A X +A Y +C X +A Y +C X +B Z +B Y +C X +B Y +B Y +C X +A Z +A Z +B Z +C X +A Z +A Z +B Y +A Z +B Y +A Z +A X +C Y +C X +B Z +C X +A Z +A Z +A Z +C X +A Z +C X +A X +A Y +A Z +A Z +C X +A Y +A Z +B X +A Y +A Z +A Z +A Z +A Z +A Z +A Z +C X +A Z +C X +A Z +C Y +A Z +A Z +B Z +A Y +A Z +B Y +B Y +A Z +C X +A Z +C X +C Z +A Z +B Z +B Z +A Z +A Z +C X +C X +B Y +A Z +A Z +B Z +C Z +B Y +B Y +C X +A Z +A Z +B Y +A Z +C X +C Z +A Z +B Z +C X +A Y +C X +A Z +B Y +B Y +A Y +A Z +A Z +A Z +A Z +A Z +A Y +A Z +A Y +A Z +B Y +B Y +B Y +C X +A Z +A Z +A Y +A Z +A Z +C X +A Y +C X +A Z +A Z +A Z +B Y +A Z +A Z +B Z +C X +A Z +B Y +B Y +C X +C Z +B Y +A Z +A Z +A Z +C X +A Z +B Z +C Z +C X +B Y +A Z +A Z +A Y +A X +A Z +A Z +A Z +A Z +A Z +A Y +B Y +A Z +B Z +B Z +A Z +C Y +A X +A Z +A Z +C X +C X +C Y +B Y +B Y +B X +A Z +A Z +B Z +A Z diff --git a/2022/2/main.cpp b/2022/2/main.cpp index 4ebabe4..384cee6 100644 --- a/2022/2/main.cpp +++ b/2022/2/main.cpp @@ -8,6 +8,12 @@ enum RPS { Scissors, }; +enum Result { + Lose = 1, + Draw, + Win, +}; + RPS ToRPS(char c) { if(c == 'A' || c == 'X') @@ -46,6 +52,28 @@ bool Won(RPS us, RPS them) return false; } +RPS Which(RPS them, Result desired) +{ + if(desired == Result::Draw) + return them; // same + + switch(them) + { + case RPS::Rock: + if(desired == Result::Lose) + return RPS::Scissors; + return RPS::Paper; + case RPS::Paper: + if(desired == Result::Lose) + return RPS::Rock; + return RPS::Scissors; + case RPS::Scissors: + if(desired == Result::Lose) + return RPS::Paper; + return RPS::Rock; + } +} + int Points(RPS us, RPS them) { int rtn = 0; @@ -73,16 +101,27 @@ int main() } unsigned long total = 0; + unsigned long new_total = 0; for(std::string line; std::getline(ifs, line); ) { char them = line[0]; char us = line[2]; + Result r = Result::Lose; + if(us == 'Y') + r = Result::Draw; + else if(us == 'Z') + r = Result::Win; + + RPS todo = Which(ToRPS(them), r); + total += Points(ToRPS(us), ToRPS(them)); + new_total += Points(todo, ToRPS(them)); } - std::cout << "Total: " << total << std::endl; + std::cout << " Total: " << total << std::endl; + std::cout << "New Total: " << new_total << std::endl; return 0; } diff --git a/2022/3/data.txt b/2022/3/data.txt new file mode 100644 index 0000000..7565e91 --- /dev/null +++ b/2022/3/data.txt @@ -0,0 +1,300 @@ +vGFhvGvvSdfwqhqvmCPnlFPnCNPcCFcWcr +ZbWZDMgsTHsrNNLJcJnsJl +HbBWQgZVZZBzbgZphwjqpmmVfdGmjG +vvCJLGnthChvtrvCCnRbTRqRPRBtbTRfPRRl +djZSgHNNwjqcdWlbcbfc +pFgMSfpMfzMDZFSgSjGJQQnCvMCVLnnJQLGC +gVhQWQpcWZVwwHVvFvnnnnDFdL +lzbPlztjltztzSjfGcPdTHLTHFCnnHCLndFGGd +jsNbzbczclttSlfbqlljRQMJRMMpJwRZhspZgJRM +hLJvfGcNDttSGvJtvSSJcqbqFBBWbjQqDrqbjDDjjb +lTswlzZdssgFpdPwZpMQnCjngCCjWBQBWWQqng +PRZMpzPZTdVZTfJvFvLFRctJcf +JHbQtHVHHLLbTJmmZddgdgwhllMNhhhTgg +spqpNGDjDPMhCFChMj +DBSDDGnpSDsDWqWczcvSqWvsBtJJLLZrRVZLJRbBZNVrBHrV +GwGhfhPhpHccvwSwrTsmsCjDmqTfbDqjss +tQntQcNRJMFnnVQFFctJqCsRmsTjjbDqDlTqTbWT +NZdVBZZNFzMFNNNvGprZcLGPGrrpcP +SvCPLrrlCSvZLrCPPBNPRvNLQBbpmbdggQTTfpfQgpgTqbbb +HVjHwMVwWtdMGwtwMwdhDFgbJgJqTmFMfFfmmfTTpq +whtHVcjDtHWtsWdwVGVHthDPzRrNSsCRLrLRlZNzZSNzNR +rjrlCCBtbtntwPPt +FvfJHqBJQWWgWgWLwnMwMLbzvhwTTp +WqHgWqBFgGfQgHfVdQFfVfrDllSsRSDmVmRCZZmSSSSZ +gjnppCgGHNPrqqmFnnbr +tGltVlJRtLRlrqcJcqZDqBJc +VvhLlvWltWdVltRTLTfgwSjGNHhggQNQNjps +HDWjCNfQjmwgWhcwPPVbZGcpMb +sFltFBRRSRJBSSsBlSSnRLPZbVGMVPZpMpPZpcMrFZMc +BLTBsstlqBRRBSvJJBsHdgdDNHCQHvbdCjQNNW +lRGzWLZNFwJVbVVGcJ +HqqpjPvHQnJgVgTnbdTV +rVvjBQHQrQhCrzlzWrRlDZ +jZjTZRSjZnhGZhzGnG +HbnPHrCbBDMnhcrVLWWLLWWg +MBwbCNDDptwNMttjdSnsqSRSFFdjtj +bSfvcsNsDdccHHQm +ljrlplvBhDHDHHHHJl +jgpzhrzRrvhFRFrzFnWfZtTwSWZPbbqNbsTqsW +vvCTvcDzHcgtvWjvcDcvgBCgwTdPFPpwpwmTSwwmdPwZpfZh +rNLMNVqLGNrVsRNJNsPnGnnfnpSFGdfddndd +VPQsMbVsPbzzvgCzgv +wPsrqprHQQZsChZn +cjgFLwWDlDltfLmTCnmWCnZZChCQ +FccccSLGFwjVlfVLLtgdSPSpMpBMdMBRRdHdBp +mQQcpmCCprrfLQqZVGqLGv +PtsJdsMtTTTvFqLTnnqbGZ +HjldthsHWztJzstZhBcHDDgpNpCpmrpgSD +lCmhDljDJgWggcnh +LdQrbdTDQGfGLPdqqFrHwRJcWRHgHBWHBJ +sLqsGtDqdGQfSTsqtfqqVMzjCzlvllZljNpCsMMl +CfLCZCCqqHlhSSrrtpRjpL +mWQbnQZVTWwNdwmDSbpbrFptjDrjRj +PJWVnTWPVnnclqqBsCCZHP +tqvtbNCgqJSgZgZvSncrrcGjBGhcnVcR +DswGQQQdRcjBnRDn +sMdlFMQQpfZbvlNtZGgN +RMlPllHtrlrlcZLsZfLcfwdDGD +QppnQhTBgwQDJsGzLQ +gTjnmjvphDSNMbtMbtMRHNVr +RHHcChrVVChCWQmRnMZmnmbTbGmFnqTT +gpzpfpszDwvDDNdwjdstnSMMHGMqvZnFTTZqbq +DsDdpfppwHsgJdjzfdDjdssLPlRccPQQrJcchPQWWQRhlQcr +rsrjQjnRnQZZqMmMMVqs +WTSTdvJLvTGJTGCMGvzBBpVVqqFVzBzVmf +tTSJhGLJbJhLJRRbHPQbnHHMrl +GGgMgBJHWHhLWMhWhgfrhgWLzmsmlzTtzHmsmlszRtszRVlT +bvScppfcQfcQSFCQpnPqwwTdRTvmzVssvswtddsv +ZDpqnPbQbPPnQbFbfSPSqbQJhGrjgMZBhWLrLrBBBBJWhg +hQCCGCNhDmGFJsTt +fcggBBpvBSrtsRTpRmpD +wflWlBlfnvfWWgMNPPLhPnzhPmLQ +pcGGTvVpcQLLzSPPPpVBVQwngNqgsJqgJgqSngsJMqJg +RZDFGhtCDGmWfWsNdwJhnMgwswqJ +ZCGjRGjZllFGHvvcTPjPTQpB +FDVsWrFZnnnfNRJdgBBBMLsJLH +wcThcTphvCThwTlblpzwGlpLRgHJWLgHLBHdHWJLBLWR +mwcbPmClwlzlwvvbTmWbQSjZmZSrDnSNVZfVFnZf +tMlttlFRSrcSFcwQSRwSzrMMPPGGPGLWgNfTNTcLPNPGBPPG +pbZVCDTqnCjVDHnHVnhBPBBbhBhbhgLgmWLh +qZCJZJqqjjCVvvRQltlzTrJtMMMw +QvvdBDdMbdFFJrMMjjmjCfCntC +lHTPsNLPcfVZLnfj +GgsWpHPpTPWpNsGvgdnDbQRQFRbdQg +jPNwllsVZjhslSjwGShZMdJDmmdmWLtMDDPHMPFd +QbvpDrbBrtMbbHJmcH +vznvzBRpBprQBqQZjNswwZDnSlGjZl +PdNTzLQPLrVMzGcMtt +FsSvDrvmrwDggHGwgV +vlpZpZmfnmFTlTWJWdbrdh +mZmnggMTSJrrmnrbmTbngJMtwPvwzzRvPGhQdGZPGPLvGvRd +FFVBNHVlFlDfCsWwLwPzzhGPCvzhQv +qBHLsDcfqFfDDfsFLNcNNBFsrgpMpnJSbnmTnrtmbMSqnpnr +qjBNwBPNPspqddssbsTsMDhTDrThQb +gvzZSZzFbgHnrHmn +fcvfZcRSZFGfZcvFbGttcPfpVjWVwqBqdwNdwNNpqV +RrTmtTrqznrnRCSqJrWlWDbhWVnfVDVWdclV +QBBgHQGvHHQswLHQQLGLHdLhfhlZZFlsscVDZfWfDhVlZZ +dLBMPpGPjLHPHPBHjjgQjHQztSJRztmrNCSCmSpmprrrrz +HHWJgjjsJrPBWBjgWgDvbbvtbNDNVtttMPPp +SnLTlhhNSntRVVLFVbbb +ChqdcNTNqqJCrQrQrrBC +BvfLLngFLDrrlDFDDnGmGlmzqzdGqMMWWwWW +RVsPbsbVZbjctccCcsCSPmdNqMqMWddwqVzhhNHwHd +tcsjPZRctZTSbbtSbtsSjZznnJfJBrfJgLvJJDDBvpTrgp +LJJsNdtJQtbWRJQttjGhjVnjcnzcsczGqj +MDPPlvCwrTlZfMMvTlPTdVcVhVVjchSBrjccSnnq +lgZCvTTZfMgHLptdRgmR +gCDrJRNgJDZRCwMgqGbtVVjTjlFbbTtR +mccnfcnSQScdvdcQQQpWdnWSjPqTbFFlbPqbPVGNjTPjtN +NnzmpWmBBzzpzDgwhDghrZrw +wcbVDBQwVBFQLFQDQcqQcLcJfpHJjmljGgMHfcfgGgjf +PtnWMtSnlgJmWWmm +nThPtRnzntstvrtRPqDFLMLdDwBBFLQDBT +zshqnVqTwqHqZQgZDSZjpFjFFF +PsBRvttdcgFFBSmc +GlPsbLtrvrrrtJlCTnVTlwwfnhwVqH +CvVVnFwWZnZwJZMNlCMNMpbMrrQG +cpghqzqqtzbGMjTNclGN +PqLBsgqBsSfBffShVmvRVwWsFpwZVpsn +LzsLSScvscqNdGdgddQjCDbzhpCDbRbhDpDDwDwt +ZlMBBBnlMFVFHVMJflJjJBfhRnCbCDpRttRPDCbWpCRbpW +mlrFmJrmscNGmsjm +FqQjLRjfvTFvlPHHNPMBDDNDPR +chWptpcWTzBPMsMMMBHW +zcJghwJZpZcgnctccdzzpGQrbQbblFFlTCCFTbdCFCFq +QcwNpCcQzpwtCGPPPnrGrfHfvN +FgjhhhjMVFVjqRRqDBVBqvMZvdrHnPZWZvsnZHdWnv +ShBFhDVghhTBgBBFRRgRCmCPCcpPbwCmLTcCmbpb +ZzlzsBzZnWnsBhFRvfvvLfWqfvMv +GgQGjjddHHPwpHpTGjPdHMvtvwJqLtJRFlRFRqMwLc +dgbbdjpGGgTHGGgQgdpmpgblrBrhrhCBSSznChsVhBsmNB +PhSwPdnpsmSWWcjjDFNqnc +GJGCTLbTZTrlfflVLFchHDHHDFcVVN +RhlhrllQZhCsPvRBvMtSvw +GVgnrgTWGVGjLVjWSpvvNmPTmpQmzvhf +tBbBDsFtszzSSbPZbh +BqlqdcqSJtFMdMjWrnGCWRrWGG +sJVJsQhMhPPSQMwdHRmmsmmwRmsr +zLFjLDTBFNWWwrqrffldlRdFRq +BLjzjTpzLpzWGTbQpMJvVMQwQhhMQM +RqSztDRhJDLmRMLlfvsP +dMdMMHZCsnbdvmbP +VHcZVVcZTwTQpgHQcgFMFBpDDzBqqqDhqJSjSjJjSD +rdMnMGjdHhfnjqWWDJPpGWPtvW +PTBSQSSzZSBSCzQFFSlZTFSvcZpWWcJvtJppvZpLLcDVcv +sgQCsBmmlFCPFFzTgTBgdNnrNndnMrrrfbrNjf +bpZdggTjHbgLglpHjldvHpjdhTVzmhzzzFPzmhFsFQSFnhhN +rPCDBcCCMPGcWDNNWQzQQSNQnNzQ +fCCJtDtGGGfGBtGqBrrcfRBcvPwpLgdZZvHdljvqpvdwbpvl +qpmsNldnlHlCqQlHsHNHwJpJMtwvvvjMvfWjpDtt +TccVBScrzBzzTGPbVTPQhWjfMjwwRtJtjMtWDWWfDS +FQFbzBGczGBFLnFmmqsCLg +qpblblvpvJzStJDrhrnGrdhDfFqf +ggNQNwBgmTcgCBTBTQQjNfDCnZRRRrRGCnrFfdnhrC +mjVFHQTHNjTwcmpzJzHltltbSssS +WChWmdcmzndhFcZrrbvrVMVssj +NQLDlDplpSJGpLfRRMZVBBGjVsGbbjbBZsGv +QNDfNqlpLgSfNfNgNfpgpqwndwWwnCCnnTFMdHndzn +ZGRPTngTZMSGMGnhSgRjQHsPbqjmsWHQCQWbNN +BFLLfpzVDBfDdlfQcsbVcNmQsqqbcC +zFvdplLDLtzFmrrwMMtTrShZ +nTdmnVCGqTsSBTqv +HlMPwMlHfPSfBBmFBfSL +trHHwRHRwMHPMJQJHnDhbdRhdpCZmChNnd +lwHWjzplvHqWHGsMLsLwLfgdfLdg +tPJNPQmQmSGcTtFmctGmSCBgsBBRbLBRVdLVLCBBLgVf +FPtTPQNPrPPQctTcNPSQJJPDjlzplnGDDjWWplWHhGvpnr +jwvvDbvsRsrrjrfvfrrZsPpCpmPJJPqlqWmzRJRTqq +HdLttdSQHdLHMMtNdLMSTtHpCmPplWhCzmzmPWlJhlNplP +BTSLtLLQtnVZDnffbwfw +snvQdrtrQprWpgmGLp +FhzwlwHccBcljFBSDmHmLpgRmPDCffWL +zFhllqjczzwJqqSqlZMsvJgVNMTbssVNnQbb +dLZHrWjWPFZWZnPjZttjddFnMDVMGJMQqvMVGVRVpjVpGVvv +zhzTwTlfTwCsShSgNhfzsQQqvMQStQMDGJJGvGQVvq +TTwCBfsfBwhzwTBCzlmHZdLmBBbtLnLbFnnF +BhBRLFmlBlmhgShHmhSlZlFgvbQNwvcsvMCcsQCwNQvNMsBw +ttWddDjrfjDcssscDbvH +jfjfPWdzdfjdnWpjtrzqnhmJGJFhSJRHSmSmlqlHmq +QvJTgvsvghHRHHNbZvNZTRSzBBCLrDqzrfDDtJSqSLBC +cPPwdcFFPDwfFrBrFfFfrC +nppwdplpRvllsgDH +BGLLWLLwHVZwHnNhwsMsrqMqhh +STlTpDpmjzmjjjgccqdsbNbBhlNnNMhsqs +pjmgjfSDSzmSgFzRZQfRRZLBVLVtZZ +WHjddztMtVLNNFFTmbFPFPRw +bJnvpQfqccQJZfpcbvCphcFGDPFGRwDGDDGwGsmPFnPF +rvffQJZJqrpZCJZJQrQpvBvStlSWSzVSWBbzBLzjtjWWWj +SJFMSMGSDLTsFgHvHL +mNzRrRRzjzqqgPHvLTHjlvWg +ZLbRpRnRnCrbmnmrRRNnwbGfMwDwfDDdSVMdVJdd +nsqTbhcDssPsPWsnchPJMSTSMmJMwTSTCJJfJw +DHvFvvdHpvpGFHDMVVJVplCCVpggCl +RdQjtvHtDQNGsZqzcqPqbNcq +GFzRjczzQJnLjJvvTj +mSfHrNHDzHDrDSSSBvTZLTNqWJWBWLlv +PfgCmfPzDVrtHsddVMsRFcVFQM +sfBgfBfBsHBHFGhsqfjgQZtQQMdZgbZQptbM +rNLRSzRTrrvvLSTWGpjpNZdQPtGtMdNM +wvSWLwzTGTCcwwwJwvwcrcRcVfFBqhhVhDqhBllBfFqBCDCs +LbTpDTcMTSzzMLhScnDnSppNQwVNZFBVnFsrwQQZrQrQrN +tJtJCRlGWljGWCtjJZVPsJBsVwQmrQNN +fvHRftqjGfWGwtfGqvLTzDTzzzchSbMDTd +JJhWZlhqLDHtBDrqrB +bwwmfrSmbmFjVSFQwSdpDvGdpPnRvDtHpGtGPG +VgFfcSQfFgmLLrNThllTZc +QmfvrpnvrrJGnBSCFTBMSWFS +NVMggbVPzCTgDFDD +NRqHRZjVRZdRVdZwNPrMrchGhGpcGfvhQlHJ +nlBdCldndlZTttSSBBccPfGWLLHcTTcWPbbW +jpsFzFmzDzNzDGChGcGGmPQHQf +CNzqvvVJNFqvgRtlqRtdnwSZ +MJtDbNHDDpmVPJVzzjLm +RslhvlfRTWvWWRwfllSZngmggznjSPznLjmSnz +TlhffRwWQhChDqbBQLFHqNrb +HWnmSbzflWltlzLfWWDzjMBvCjjCTCgcMvzBBB +qRRRZJwhZFGdRNfghVjMVVgfcghC +QFFqwNNNwdNZZpqqZfnDSHmmlDLtWtHWlQmD +JrFdNTTLRBTJrFVrBNdVLFBdlHbzQQsQzbPJtpbtltWsHbQw +gZffDfMlCfjCSqMcpHPWHszstzHjQwpb +GMnvfGlfvSqvcMMDgDDcfnqSVFRdmTmVdNBTdmRmBFVnLLBT +ZvRHtDcZntLZssMssQBrMdnC +jglqlVdlbqgVWjJMbrrBCpmQBBfrpm +GqVVPPjPNjFVllNjJjFDvzTLZRvcLRLvTGdGDv +fDVzvVfzzZPMsMbb +LHtBwLBdhFgdHLLthRwFGGMsmrHMmmbZSmqbMGGG +bblRwbTRlllfVQnCQn +fVZzjRzpzpVCRPZhVWQvvLsWWWFQlmjWmG +JDHgJdtwbZqJqsWBBDLlQlvLms +cHHtdbqwrqbbtSbTgSTcVCMRZnRRVNhVPNMPpfMc +fCMPBBdpMpsqMssQccnV +TlwGWDjDZHLjZHHlLGmnlnNcRllsJcqtsJRV +ZHhZHThLLrGwjDDjLwGWWWSjPpbpzrvBFBFdBBbqvCbpFfpg +bvDfDPtCVfFFVdWWpmLRmzWzzdBW +jgZTghhjrGrsswrsghHrlgTGzSRmMLwpJMSMzWLLWRzpRRSc +lpjTpGHlpsNGTHllHrCFnDNPtVnvfQtQtQNP +BwlQcwZBwwwQNqJTrrsRGCDTNt +bMpVPSfRvCbCtTqsCs +dPSRfRpPPjjmLMgZBZBLZZwFQnZn +TsVfggTqVnsLVTdTpmDdRhwPRtPRDRwD +ljHBSWZvvFWvBFPppnQPwnpmzR +MSHSjbBclBSjccLJgqgnLVqTbsTT +zncfVgRzVJgnTfVqNHvZJZNJNMpHbdvH +PCBpsLjPPmMGdHNdHBHZ +jSLlrhLPDWLrPrDCLPCfnpzcVRFcRTnlVncntT +ccvSgjHtRjcjSvjvSrBjzSHHwnJPbgwPPZVVVZnPpZlpwnlT +ffqNqGGsGWqLTNqZwdndPnnJJpZVJW +sNmqhsCMQsMTmjrcmrHrRj +gWWWzNVJDwDzVWVDGbGNnhTnHLsmhmhfsQTNSmHd +vtMPZvrZvqtqBHljrqSnnmTfLfdnQsjhjmhL +MMPZPBqZCrBtvZcrBlDbGbbbzHJCbbRwgwDz +hGSRhsMswhcNNGwhwncMnCqCJNrHJPJJrJtCJdqHJm +BgVTzWBdTfCmfCJH +dlbVFvvWVZhSRQDMnlhc +WfpzBZmgJlQVGvWF +wHSbrHwmccnrmrHsClGqFGbQjQjjQJQQGv +SHPwwsRcrrNtrNSsphmZLzpfzhghZPdD +DFDPRpmgbPQtmgBBQDDNJTMMBZsqsZGqGZTGCGSqWG +fVvVVLcJVzlvzhqfSTCsZsMGMHqq +zJdrrdnzcLlwczwbQmQngRDQPbtDpQ +HDZZrpFqwRrQfBqhjjlVlQ +czTgvvWPNgPGcTlsQflCVshClC +PgNvtSJNvGVMMzNzgGvPGGLHFDdFdmZSZRdDdRrmpFwL +SVHNVFVPBHJqHhgFCgzLmCwppm +DvDdsGZljDlfdZnjnnZGMzLpRgLfMCLmzfPLhmgp +jZDZlrvrZTrTrTQrDsjslHNJqtWbWHbqbPBWNVQWBJ +NmGGBdWWJDJTTZHm +hFVhcqFjncpcppSjqfppqDvzDDDbbDZvDZZbHfJgvJ +jrPqnnHnqSPwPGWPdWst +BfhbwMwbbPbHPPPlrdJjrlMJLrJVTd +pnQnGnWDjnJdlJCh +qshsWvpttzNNQDtzRRPvwfcPHBBBHwbw +SHzGRQjhwwhGzjjwRjfBqpqbNCqNnnqqQqPlQC +TZtgLmZgVmgdFgmZtdrbNqnqlNlpblnlrnBd +DvgmvvZgmWJJjwHHhJSzps +JjlrlJjPJgDjJjJnDRDjNwGGqMvSddvPvwQddqSVvq +SLpphFLhFZhWLzvswwWqsqVVQWdv +FSHtTLZpfzRDDrJgRNjT +wjCMvrMlqqWHvWqddrHqgnBNhcffthhVLtpgLBnw +GbQFZzZZphnpgNZV +FhFzRTDRPzsRQGQGTFlllrJHjdsJlHMqjjHr +LqDcTbmJcqSJSTmnrTcmJrfffplfjZsGZfGGZfQLdplj +hWddgBvzWFZfPsQlGh +RBWBRCdHtgHttVVzHBVNNNDwSTDcSSSbScDDwbwbnmRS +FFPzwlZVVrzFFlFLVlllZdHCHPQMnJQQbhhChdhCbb +BRRqGBgRfqvgvBDDDTRgghNCMMTQNNbVJMNJJdbbdT +DfpgjGfsRWrFVzwLcs +PMTSdSmFjhFpNTqvppvRBrRBrDqB +HnZZznJbzGZGlZtZWHlJGcGcwMvQBsrwRDQvcDgrgDgrqRvq +HGlGfnJZfMMCfNhm +nRssqlqVRppVwdMMQwFgtRFz +smTvLLTvvNLtwMMQNg +CmPGBvZGWvBSGGDmTZjZlhpJcpHDJsbDnlrrprpl +djcQGNQqdGdGqMCgndwgCLDMgW +nvBvHpBppnvPPnJTBWLJVMwVfWJfCbfWgW +hsHHpBsvRTHpsPszTBTTsRTslGqGqlcqlScnqmhZmmZSZSjl +DddBHCmfWCBTDBHTHfMpzhzpJJMJsFrGrz +tPVPmbnttjPnZvSvSbnmZPZPNpNGMpJNzzNrGJpvhsshMpFs +mwnZcbmmStbVtVjbZVlcLTBlcLCRHRDWCWWW diff --git a/2022/3/main.cpp b/2022/3/main.cpp new file mode 100644 index 0000000..51ba2c3 --- /dev/null +++ b/2022/3/main.cpp @@ -0,0 +1,81 @@ +#include +#include +#include +#include +#include + +int score(char c) +{ + if(c >= 'a' && c <= 'z') + return (c - 'a') + 1; + return (c - 'A') + 1 + 26; +} + +int main() +{ + std::ifstream ifs("data.txt"); + if(!ifs.is_open()) + { + std::cerr << "Missing data.txt." << std::endl; + return -1; + } + + unsigned long total = 0; + unsigned long total_pt2 = 0; + + for(std::string line; std::getline(ifs, line); ) + { + if(line == "") + continue; + + const size_t half = line.size() / 2; + std::string right = line.substr(half); + for(int i = 0; i < half; ++i) + { + if(right.contains(line[i])) + { + total += score(line[i]); + break; + } + } + + // Part 2: + static std::vector lines; + lines.push_back(line); + if(lines.size() == 3) + { + // get all letters it could be from first line + std::set options; + for(const char c : lines[0]) + options.insert(c); + + // remove if not a duplicate + std::set to_remove; + for(auto i = 1; i < 3; ++i) // remaining two lines + { + for(const char c : options) + if(!lines[i].contains(c)) + to_remove.insert(c); + for(const char c : to_remove) + options.erase(c); + } + + if(options.size() != 1) + { + std::cerr << "Error: More than one remaining option: "; + for(const char c : options) + std::cout << c << ","; + exit(-1); + } + + total_pt2 += score(*(options.begin())); + + lines.clear(); // reset + } + } + + std::cout << " Total: " << total << std::endl; + std::cout << "PT2 Total: " << total_pt2 << std::endl; + + return 0; +}