Fuck you Logan
This commit is contained in:
commit
6a3d307033
9 changed files with 5072 additions and 0 deletions
2255
day_1/input
Normal file
2255
day_1/input
Normal file
File diff suppressed because it is too large
Load diff
BIN
day_1/main
Executable file
BIN
day_1/main
Executable file
Binary file not shown.
41
day_1/main.cpp
Normal file
41
day_1/main.cpp
Normal file
|
@ -0,0 +1,41 @@
|
|||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if(argc != 2) {
|
||||
std::cerr << "Usage " << argv[0] << " <input>" << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
std::ifstream file;
|
||||
file.open(argv[1]);
|
||||
|
||||
std::string line;
|
||||
std::vector<int> groups;
|
||||
int sum = 0;
|
||||
while(file) {
|
||||
std::getline(file, line);
|
||||
std::cout << "got " << line << std::endl;
|
||||
|
||||
if(line == "") {
|
||||
if(sum > 0)
|
||||
groups.push_back(sum);
|
||||
sum = 0;
|
||||
} else {
|
||||
sum += std::stoi(line);
|
||||
}
|
||||
}
|
||||
|
||||
for(int sum : groups) {
|
||||
std::cout << "sum " << sum << std::endl;
|
||||
}
|
||||
std::cout << "Parsed " << groups.size() << " groups" << std::endl;
|
||||
|
||||
std::cout << "Max is " << *std::max_element(groups.begin(), groups.end()) << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
52
day_1/main2.cpp
Normal file
52
day_1/main2.cpp
Normal file
|
@ -0,0 +1,52 @@
|
|||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if(argc != 2) {
|
||||
std::cerr << "Usage " << argv[0] << " <input>" << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
std::ifstream file;
|
||||
file.open(argv[1]);
|
||||
|
||||
std::string line;
|
||||
std::vector<int> groups;
|
||||
int sum = 0;
|
||||
while(file) {
|
||||
std::getline(file, line);
|
||||
std::cout << "got " << line << std::endl;
|
||||
|
||||
if(line == "") {
|
||||
if(sum > 0)
|
||||
groups.push_back(sum);
|
||||
sum = 0;
|
||||
} else {
|
||||
sum += std::stoi(line);
|
||||
}
|
||||
}
|
||||
|
||||
for(int sum : groups) {
|
||||
std::cout << "sum " << sum << std::endl;
|
||||
}
|
||||
std::cout << "Parsed " << groups.size() << " groups" << std::endl;
|
||||
|
||||
int maxs[3];
|
||||
auto max = std::max_element(groups.begin(), groups.end());
|
||||
maxs[0] = *max;
|
||||
groups.erase(max);
|
||||
max = std::max_element(groups.begin(), groups.end());
|
||||
maxs[1] = *max;
|
||||
groups.erase(max);
|
||||
max = std::max_element(groups.begin(), groups.end());
|
||||
maxs[2] = *max;
|
||||
groups.erase(max);
|
||||
|
||||
std::cout << "Max is " << maxs[0] + maxs[1] + maxs[2] << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
2501
day_2/input
Normal file
2501
day_2/input
Normal file
File diff suppressed because it is too large
Load diff
BIN
day_2/main
Executable file
BIN
day_2/main
Executable file
Binary file not shown.
107
day_2/main.cpp
Normal file
107
day_2/main.cpp
Normal file
|
@ -0,0 +1,107 @@
|
|||
#include <utility>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <vector>
|
||||
|
||||
|
||||
enum class Play : int {
|
||||
FUCKYOU = 0,
|
||||
ROCK = 1,
|
||||
PAPER = 2,
|
||||
SCISSORS = 3,
|
||||
};
|
||||
|
||||
enum class Result : char {
|
||||
WIN = 'W',
|
||||
LOSS = 'L',
|
||||
TIE = 'T',
|
||||
};
|
||||
|
||||
|
||||
typedef std::pair<Play, Play> game_t;
|
||||
|
||||
|
||||
Play char_to_play(char c) {
|
||||
switch(c) {
|
||||
case 'A':
|
||||
case 'X':
|
||||
return Play::ROCK;
|
||||
case 'B':
|
||||
case 'Y':
|
||||
return Play::PAPER;
|
||||
case 'C':
|
||||
case 'Z':
|
||||
return Play::SCISSORS;
|
||||
}
|
||||
|
||||
return Play::FUCKYOU;
|
||||
}
|
||||
|
||||
|
||||
std::vector<game_t> read_file(std::string path) {
|
||||
std::fstream file;
|
||||
file.open(path);
|
||||
|
||||
std::string line;
|
||||
std::vector<game_t> games;
|
||||
while(file) {
|
||||
std::getline(file, line);
|
||||
if(line == "")
|
||||
break;
|
||||
|
||||
auto opponent = char_to_play(line[0]);
|
||||
auto mine = char_to_play(line[2]);
|
||||
|
||||
games.push_back(std::make_pair(opponent, mine));
|
||||
}
|
||||
|
||||
return games;
|
||||
}
|
||||
|
||||
|
||||
Result judge_game(game_t game) {
|
||||
auto [opponent, me] = game;
|
||||
if(opponent == me)
|
||||
return Result::TIE;
|
||||
if(opponent == Play::ROCK && me == Play::SCISSORS)
|
||||
return Result::LOSS;
|
||||
if(opponent == Play::SCISSORS && me == Play::ROCK)
|
||||
return Result::WIN;
|
||||
if((int)opponent > (int)me)
|
||||
return Result::LOSS;
|
||||
else
|
||||
return Result::WIN;
|
||||
}
|
||||
|
||||
int score_game(game_t game, Result result) {
|
||||
int score = 0;
|
||||
if(result == Result::WIN)
|
||||
score = 6;
|
||||
else if(result == Result::TIE)
|
||||
score = 3;
|
||||
|
||||
score += (int)game.second;
|
||||
|
||||
return score;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
auto games = read_file(argv[1]);
|
||||
|
||||
int total = 0;
|
||||
|
||||
for(auto game : games) {
|
||||
auto [opponent, me] = game;
|
||||
std::cout << (int)opponent << " " << (int)me << std::endl;
|
||||
auto result = judge_game(game);
|
||||
std::cout << (char)result << std::endl;
|
||||
int score = score_game(game, result);
|
||||
std::cout << score << std::endl;
|
||||
total += score;
|
||||
}
|
||||
|
||||
std::cout << total << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
BIN
day_2/main2
Executable file
BIN
day_2/main2
Executable file
Binary file not shown.
116
day_2/main2.cpp
Normal file
116
day_2/main2.cpp
Normal file
|
@ -0,0 +1,116 @@
|
|||
#include <utility>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <vector>
|
||||
|
||||
|
||||
enum class Play : int {
|
||||
ROCK = 1,
|
||||
PAPER = 2,
|
||||
SCISSORS = 3,
|
||||
};
|
||||
|
||||
enum class Result : char {
|
||||
WIN = 'W',
|
||||
LOSS = 'L',
|
||||
TIE = 'T',
|
||||
};
|
||||
|
||||
|
||||
typedef std::pair<Play, Result> 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<game_t> read_file(std::string path) {
|
||||
std::fstream file;
|
||||
file.open(path);
|
||||
|
||||
std::string line;
|
||||
std::vector<game_t> 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;
|
||||
}
|
Reference in a new issue