Advertisement
Guest User

Untitled

a guest
Apr 18th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.85 KB | None | 0 0
  1. #include <ctime>
  2. #include <fstream>
  3. #include <iostream>
  4. #include <map>
  5. #include <sstream>
  6.  
  7. struct TeamStatistics {
  8. std::string team;
  9. unsigned int points;
  10. unsigned int goals_for;
  11. unsigned int goals_against;
  12. };
  13.  
  14. TeamStatistics ConstructTeamStatistics(const std::string& name) {
  15. TeamStatistics ts{name, 0, 0, 0};
  16. return ts;
  17. }
  18.  
  19. void Won(TeamStatistics* ts, unsigned int goals_for,
  20. unsigned int goals_against) {
  21. ts->points += 2;
  22. ts->goals_for += goals_for;
  23. ts->goals_against += goals_against;
  24. }
  25. void Draw(TeamStatistics* ts, unsigned int goals_for,
  26. unsigned int goals_against) {
  27. ts->points += 1;
  28. ts->goals_for += goals_for;
  29. ts->goals_against += goals_against;
  30. }
  31. void Lost(TeamStatistics* ts, unsigned int goals_for,
  32. unsigned int goals_against) {
  33. ts->goals_for += goals_for;
  34. ts->goals_against += goals_against;
  35. }
  36.  
  37. int Difference(const TeamStatistics& ts) {
  38. return ts.goals_for - ts.goals_against;
  39. }
  40.  
  41. struct Match {
  42. TeamStatistics* home;
  43. TeamStatistics* guest;
  44. unsigned int goals_home;
  45. unsigned int goals_guest;
  46. };
  47.  
  48. void AnalyseMatch(const Match& match) {
  49. if (match.goals_home > match.goals_guest) {
  50. Won(match.home, match.goals_home, match.goals_guest);
  51. Lost(match.guest, match.goals_guest, match.goals_home);
  52. } else if (match.goals_home < match.goals_guest) {
  53. Lost(match.home, match.goals_home, match.goals_guest);
  54. Won(match.guest, match.goals_guest, match.goals_home);
  55. } else {
  56. Draw(match.home, match.goals_home, match.goals_guest);
  57. Draw(match.guest, match.goals_guest, match.goals_home);
  58. }
  59. }
  60.  
  61. void Load(const std::string& filename,
  62. std::map<std::string, TeamStatistics>* teams) {
  63. std::ifstream infile(filename);
  64.  
  65. if (!infile.good()) {
  66. return;
  67. }
  68.  
  69. std::string ignore;
  70. std::getline(infile, ignore);
  71.  
  72. while (infile.good()) {
  73. std::getline(infile, ignore, ',');
  74. std::getline(infile, ignore, ',');
  75.  
  76. std::string team_home;
  77. std::getline(infile, team_home, '(');
  78. std::getline(infile, ignore, ',');
  79. team_home = team_home.substr(0, team_home.length() - 1);
  80. // std::cout << ">" << team_home << "<" << std::endl;
  81.  
  82. unsigned int goals_home;
  83. infile >> goals_home;
  84. // std::cout << goals_home << std::endl;
  85. std::getline(infile, ignore, '-');
  86.  
  87. unsigned int goals_guest;
  88. infile >> goals_guest;
  89. // std::cout << goals_guest << std::endl;
  90. std::getline(infile, ignore, ',');
  91.  
  92. std::getline(infile, ignore, ',');
  93.  
  94. std::string team_guest;
  95. std::getline(infile, team_guest, '(');
  96. std::getline(infile, ignore);
  97. team_guest = team_guest.substr(0, team_guest.length() - 1);
  98. // std::cout << ">" << team_guest << "<" << std::endl;
  99.  
  100. if (teams->find(team_home) == teams->end()) {
  101. (*teams)[team_home] = ConstructTeamStatistics(team_home);
  102. }
  103. if (teams->find(team_guest) == teams->end()) {
  104. (*teams)[team_guest] = ConstructTeamStatistics(team_guest);
  105. }
  106. Match match{&((*teams)[team_home]), &((*teams)[team_guest]), goals_home,
  107. goals_guest};
  108. AnalyseMatch(match);
  109. }
  110. }
  111.  
  112. int main() {
  113. std::cout << "========================================" << std::endl;
  114. std::cout << "TESTS" << std::endl;
  115. TeamStatistics ts = ConstructTeamStatistics("Werder Bremen");
  116. Won(&ts, 2, 1);
  117. Draw(&ts, 7, 7);
  118. Lost(&ts, 13, 27);
  119.  
  120. std::cout << "Won/Draw/Lost: " << ts.points << " expected 4" << std::endl;
  121. std::cout << "Won/Draw/Lost: " << ts.goals_for << " expected 22" << std::endl;
  122. std::cout << "Won/Draw/Lost: " << ts.goals_against << " expected 35"
  123. << std::endl;
  124. std::cout << "Difference: " << Difference(ts) << " expected -13" << std::endl;
  125.  
  126. TeamStatistics home = ConstructTeamStatistics("H");
  127. TeamStatistics guest = ConstructTeamStatistics("G");
  128.  
  129. AnalyseMatch({&home, &guest, 2, 1});
  130. AnalyseMatch({&home, &guest, 5, 3});
  131. AnalyseMatch({&home, &guest, 3, 7});
  132. AnalyseMatch({&home, &guest, 17, 17});
  133.  
  134. std::cout << "AnalyseMatch Home: " << home.points << " expected 7"
  135. << std::endl;
  136. std::cout << "AnalyseMatch Home: " << home.goals_for << " expected 27"
  137. << std::endl;
  138. std::cout << "AnalyseMatch Home: " << home.goals_against << " expected 28"
  139. << std::endl;
  140. std::cout << "AnalyseMatch Guest: " << guest.points << " expected 4"
  141. << std::endl;
  142. std::cout << "AnalyseMatch Guest: " << guest.goals_for << " expected 28"
  143. << std::endl;
  144. std::cout << "AnalyseMatch Guest: " << guest.goals_against << " expected 27"
  145. << std::endl;
  146. std::cout << "========================================" << std::endl;
  147.  
  148. std::map<std::string, TeamStatistics> teams;
  149. Load("1-bundesliga.csv", &teams);
  150.  
  151. for (auto ts : teams) {
  152. std::cout << ts.first << " " << ts.second.points << std::endl;
  153. }
  154.  
  155. return EXIT_FAILURE;
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement