Advertisement
Guest User

Untitled

a guest
Dec 15th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. #include "BowlingScore.h"
  2.  
  3. BowlingScore::BowlingScore()
  4. {}
  5.  
  6. void BowlingScore::ParseInput(const std::string& p_input)
  7. {
  8. std::copy(p_input.begin(), p_input.end(), std::back_inserter(sequence));
  9. }
  10.  
  11. unsigned BowlingScore::Calculate()
  12. {
  13. for(auto iterator = sequence.begin(); iterator != sequence.end(); ++iterator)
  14. {
  15. score.push_back(GetSymbolValue(iterator));
  16. }
  17. auto score_iterator = score.begin();
  18. int weak_symbol_counter = 0, steps = 0, sum = 0;
  19. auto nextStep = [&](){
  20. ++steps;
  21. weak_symbol_counter = 0;
  22. };
  23.  
  24. for(auto symbol_iterator = sequence.begin(); symbol_iterator != sequence.end() && steps != 10; ++score_iterator, ++symbol_iterator)
  25. {
  26. if(*symbol_iterator == 'X')
  27. {
  28. Strike(score_iterator);
  29. nextStep();
  30. }
  31. else if(*symbol_iterator == '/')
  32. {
  33. Spare(score_iterator);
  34. nextStep();
  35. }
  36. else if(weak_symbol_counter == 1)
  37. {
  38. nextStep();
  39. }
  40. else
  41. {
  42. ++weak_symbol_counter;
  43. }
  44. sum += *score_iterator;
  45. }
  46.  
  47. return sum;
  48. }
  49.  
  50. unsigned BowlingScore::GetSymbolValue(std::vector<char>::iterator iterator) {
  51. if(*iterator == '-')
  52. return 0;
  53. else if(*iterator == '/')
  54. return 10 - GetSymbolValue(std::prev(iterator));
  55. else if(*iterator == 'X')
  56. return 10;
  57. else
  58. return (unsigned)(*iterator - '0');
  59. }
  60.  
  61. void BowlingScore::Spare(std::vector<int>::iterator score_iterator)
  62. {
  63. *score_iterator += *std::next(score_iterator);
  64. }
  65.  
  66. void BowlingScore::Strike(std::vector<int>::iterator score_iterator)
  67. {
  68. *score_iterator += *std::next(score_iterator);
  69. *score_iterator += *std::next(score_iterator, 2);
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement