From 43cd0101f33bf89f8c4983cf2893d74187a77997 Mon Sep 17 00:00:00 2001 From: rasmus Date: Tue, 18 Mar 2025 16:40:31 +0100 Subject: [PATCH] Score calculation has been moved to it's own file --- Include/NumberHelper.h | 4 +++- Include/ScoreCalculator.h | 18 +++++++++++++++ rolls.txt | 2 ++ src/NumberHelper.cpp | 2 +- src/ScoreCalculator.cpp | 47 +++++++++++++++++++++++++++++++++++++++ src/main.cpp | 37 ++++-------------------------- 6 files changed, 75 insertions(+), 35 deletions(-) create mode 100644 Include/ScoreCalculator.h create mode 100644 src/ScoreCalculator.cpp diff --git a/Include/NumberHelper.h b/Include/NumberHelper.h index ab37786..9c4da23 100644 --- a/Include/NumberHelper.h +++ b/Include/NumberHelper.h @@ -4,13 +4,15 @@ #include #include +using namespace std; + class NumberHelper { public: NumberHelper(); ~NumberHelper(); - static std::vector GetNumbers(const std::string csv); + static vector GetNumbers(string csv); }; #endif \ No newline at end of file diff --git a/Include/ScoreCalculator.h b/Include/ScoreCalculator.h new file mode 100644 index 0000000..a49dc10 --- /dev/null +++ b/Include/ScoreCalculator.h @@ -0,0 +1,18 @@ +#ifndef SCORECALCULATOR_H +#define SCORECALCULATOR_H + +#include +#include + +using namespace std; + +class ScoreCalculator { + public: + ScoreCalculator(); + + ~ScoreCalculator(); + + static int GetScore(vector rolls); +}; + +#endif \ No newline at end of file diff --git a/rolls.txt b/rolls.txt index 2daa3f9..ef0a92e 100644 --- a/rolls.txt +++ b/rolls.txt @@ -1 +1,3 @@ +2, 3, 5, 4, 9, 1, 2, 5, 3, 2, 4, 2, 3, 3, 4, 6, 10, 3, 2 +5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 diff --git a/src/NumberHelper.cpp b/src/NumberHelper.cpp index 0cf7378..3a4a366 100644 --- a/src/NumberHelper.cpp +++ b/src/NumberHelper.cpp @@ -6,7 +6,7 @@ NumberHelper::NumberHelper() {}; NumberHelper::~NumberHelper() {}; -std::vector NumberHelper::GetNumbers(const std::string csv){ +std::vector NumberHelper::GetNumbers(std::string csv){ std::vector rolls; std::stringstream ss(csv); std::string number; diff --git a/src/ScoreCalculator.cpp b/src/ScoreCalculator.cpp new file mode 100644 index 0000000..bdff0ee --- /dev/null +++ b/src/ScoreCalculator.cpp @@ -0,0 +1,47 @@ +#include "../Include/ScoreCalculator.h" + +ScoreCalculator::ScoreCalculator() {}; +ScoreCalculator::~ScoreCalculator() {}; + +int ScoreCalculator::GetScore(vector rolls) { + // Calculate score + int score = 0; + int frame = 0; + + while (true) { + if (rolls[frame] == 10) { + // If we're on our last frame, and roll a 10. + if (frame + 3 == rolls.size() && rolls[frame - 3] == 10) { + score += 10 + rolls[frame + 1] + rolls[frame + 2]; + break; + } + + score += 10 + rolls[frame + 1] + rolls[frame + 2]; + frame += 1; + continue; + } + + // Spare + if (rolls[frame] + rolls[frame + 1] == 10) { + if (frame + 3 == rolls.size() && rolls[frame] + rolls[frame + 1] == 10) + { + score += 10 + rolls[frame + 1]; + break; + } + + score += 10 + rolls[frame + 2]; + frame += 2; + continue; + } + + // Open Frame + score += rolls[frame] + rolls[frame + 1]; + frame += 2; + + if (frame == rolls.size()) { + break; + } + } + + return score; +} \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 1ea631c..3cca3c7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,12 +3,13 @@ #include "../Include/FileReader.h" #include "../Include/FileHelper.h" #include "../Include/NumberHelper.h" +#include "../Include/ScoreCalculator.h" using namespace std; int main(int argc, char *argv[]) { if (argc < 2) { - std::cerr << "Please provide a CSV formatted file."; + cerr << "Please provide a CSV formatted file."; return 0; } @@ -18,44 +19,14 @@ int main(int argc, char *argv[]) { } string file = FileReader::GetFile(argv[1]); - + vector rolls = NumberHelper::GetNumbers(file); + int score = ScoreCalculator::GetScore(rolls); - // Calculate score - int score = 0; - int frame = 0; - while (true) { - if (rolls[frame] == 10) { - if (frame + 3 == rolls.size() && rolls[frame - 3] == 10) { - score += 10 + rolls[frame + 1] + rolls[frame + 2]; - break; - } - - score += 10 + rolls[frame + 1] + rolls[frame + 2]; - frame += 1; - continue; - } - - // Spare - if (rolls[frame] + rolls[frame + 1] == 10) { - score += 10 + rolls[frame + 2]; - frame += 2; - continue; - } - - // Open Frame - score += rolls[frame] + rolls[frame + 1]; - frame += 2; - - if (frame == rolls.size()) { - break; - } - } cout << "Score: " << score << std::endl; - return 0; }