Added day 2 and 3, but didn't do them in rust like I wanted to.

This commit is contained in:
David Vereb
2022-12-05 11:08:48 -05:00
parent 209aa39edb
commit be4347ab5f
4 changed files with 2921 additions and 1 deletions

2500
2022/2/data.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -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;
}