Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ctime>
- #include <fstream>
- #include <iostream>
- #include <map>
- #include <sstream>
- struct TeamStatistics {
- std::string team;
- unsigned int points;
- unsigned int goals_for;
- unsigned int goals_against;
- };
- TeamStatistics ConstructTeamStatistics(const std::string& name) {
- TeamStatistics ts{name, 0, 0, 0};
- return ts;
- }
- void Won(TeamStatistics* ts, unsigned int goals_for,
- unsigned int goals_against) {
- ts->points += 2;
- ts->goals_for += goals_for;
- ts->goals_against += goals_against;
- }
- void Draw(TeamStatistics* ts, unsigned int goals_for,
- unsigned int goals_against) {
- ts->points += 1;
- ts->goals_for += goals_for;
- ts->goals_against += goals_against;
- }
- void Lost(TeamStatistics* ts, unsigned int goals_for,
- unsigned int goals_against) {
- ts->goals_for += goals_for;
- ts->goals_against += goals_against;
- }
- int Difference(const TeamStatistics& ts) {
- return ts.goals_for - ts.goals_against;
- }
- struct Match {
- TeamStatistics* home;
- TeamStatistics* guest;
- unsigned int goals_home;
- unsigned int goals_guest;
- };
- void AnalyseMatch(const Match& match) {
- if (match.goals_home > match.goals_guest) {
- Won(match.home, match.goals_home, match.goals_guest);
- Lost(match.guest, match.goals_guest, match.goals_home);
- } else if (match.goals_home < match.goals_guest) {
- Lost(match.home, match.goals_home, match.goals_guest);
- Won(match.guest, match.goals_guest, match.goals_home);
- } else {
- Draw(match.home, match.goals_home, match.goals_guest);
- Draw(match.guest, match.goals_guest, match.goals_home);
- }
- }
- void Load(const std::string& filename,
- std::map<std::string, TeamStatistics>* teams) {
- std::ifstream infile(filename);
- if (!infile.good()) {
- return;
- }
- std::string ignore;
- std::getline(infile, ignore);
- while (infile.good()) {
- std::getline(infile, ignore, ',');
- std::getline(infile, ignore, ',');
- std::string team_home;
- std::getline(infile, team_home, '(');
- std::getline(infile, ignore, ',');
- team_home = team_home.substr(0, team_home.length() - 1);
- // std::cout << ">" << team_home << "<" << std::endl;
- unsigned int goals_home;
- infile >> goals_home;
- // std::cout << goals_home << std::endl;
- std::getline(infile, ignore, '-');
- unsigned int goals_guest;
- infile >> goals_guest;
- // std::cout << goals_guest << std::endl;
- std::getline(infile, ignore, ',');
- std::getline(infile, ignore, ',');
- std::string team_guest;
- std::getline(infile, team_guest, '(');
- std::getline(infile, ignore);
- team_guest = team_guest.substr(0, team_guest.length() - 1);
- // std::cout << ">" << team_guest << "<" << std::endl;
- if (teams->find(team_home) == teams->end()) {
- (*teams)[team_home] = ConstructTeamStatistics(team_home);
- }
- if (teams->find(team_guest) == teams->end()) {
- (*teams)[team_guest] = ConstructTeamStatistics(team_guest);
- }
- Match match{&((*teams)[team_home]), &((*teams)[team_guest]), goals_home,
- goals_guest};
- AnalyseMatch(match);
- }
- }
- int main() {
- std::cout << "========================================" << std::endl;
- std::cout << "TESTS" << std::endl;
- TeamStatistics ts = ConstructTeamStatistics("Werder Bremen");
- Won(&ts, 2, 1);
- Draw(&ts, 7, 7);
- Lost(&ts, 13, 27);
- std::cout << "Won/Draw/Lost: " << ts.points << " expected 4" << std::endl;
- std::cout << "Won/Draw/Lost: " << ts.goals_for << " expected 22" << std::endl;
- std::cout << "Won/Draw/Lost: " << ts.goals_against << " expected 35"
- << std::endl;
- std::cout << "Difference: " << Difference(ts) << " expected -13" << std::endl;
- TeamStatistics home = ConstructTeamStatistics("H");
- TeamStatistics guest = ConstructTeamStatistics("G");
- AnalyseMatch({&home, &guest, 2, 1});
- AnalyseMatch({&home, &guest, 5, 3});
- AnalyseMatch({&home, &guest, 3, 7});
- AnalyseMatch({&home, &guest, 17, 17});
- std::cout << "AnalyseMatch Home: " << home.points << " expected 7"
- << std::endl;
- std::cout << "AnalyseMatch Home: " << home.goals_for << " expected 27"
- << std::endl;
- std::cout << "AnalyseMatch Home: " << home.goals_against << " expected 28"
- << std::endl;
- std::cout << "AnalyseMatch Guest: " << guest.points << " expected 4"
- << std::endl;
- std::cout << "AnalyseMatch Guest: " << guest.goals_for << " expected 28"
- << std::endl;
- std::cout << "AnalyseMatch Guest: " << guest.goals_against << " expected 27"
- << std::endl;
- std::cout << "========================================" << std::endl;
- std::map<std::string, TeamStatistics> teams;
- Load("1-bundesliga.csv", &teams);
- for (auto ts : teams) {
- std::cout << ts.first << " " << ts.second.points << std::endl;
- }
- return EXIT_FAILURE;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement