aboutsummaryrefslogtreecommitdiffstats
path: root/src/RelationshipHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/RelationshipHandler.cpp')
-rw-r--r--src/RelationshipHandler.cpp88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/RelationshipHandler.cpp b/src/RelationshipHandler.cpp
new file mode 100644
index 0000000..5aab81b
--- /dev/null
+++ b/src/RelationshipHandler.cpp
@@ -0,0 +1,88 @@
+#include "Response.hpp"
+#include "RelationshipHandler.hpp"
+
+using std::string;
+using std::vector;
+
+vector<int> Handler::RelationShipHandler::buildCalArr(vector<string> nameV) {
+ string ges = nameV.at(0) + nameV.at(1);
+
+ for (auto &c : ges) {
+ c = tolower(c);
+ }
+
+ vector<int> v{};
+ for (auto c1 : ges) {
+ int count = 0;
+ for (auto c2: ges) {
+ if (c1 == c2) {
+ ++count;
+ }
+ }
+ v.push_back(count);
+ }
+
+ return v;
+}
+
+int Handler::RelationShipHandler::calculate(vector<string> names) {
+ sort(names.begin(), names.end());
+ vector<int> nums = buildCalArr(names);
+
+ while (nums.size() > 2) {
+ vector<int> tempNums{};
+ for (std::size_t i = 0; i < nums.size() / 2; i++) {
+ int temp = nums.at(i) + nums.at(nums.size() - i - 1);
+ if (nums.size() % 2 == 1 && i == nums.size() / 2) {
+ tempNums.push_back(nums.at(i));
+ } else {
+ if (temp < 10) {
+ tempNums.push_back(temp);
+ } else {
+ tempNums.push_back(temp / 10);
+ tempNums.push_back(temp % 10);
+ }
+ }
+ }
+ if (nums.size() % 2 == 1) {
+ tempNums.push_back(nums.at(nums.size() / 2));
+ }
+ nums.clear();
+ for (auto i: tempNums) {
+ nums.push_back(i);
+ }
+ }
+
+ return 10 * nums.at(0) + nums.at(1);
+}
+
+bool Handler::RelationShipHandler::isAlphaNum(const string &str) {
+ for (char i: str) {
+ if (!isalnum(i)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+string Handler::RelationShipHandler::rsStart(vector<string> const &names) {
+ //vector<string> names = removeDupWord(str);
+ if (names.size() != 2) {
+ return "Gib zwei Namen ein Du Troll!";
+ }
+ if (!isAlphaNum(names.at(0))) {
+ return "Seit wann enthælt ein Name Sonderzeichen oder Zahlen? Spüre den Zorn von N!";
+ }
+ if (!isAlphaNum(names.at(1))) {
+ return "Seit wann enthælt ein Name Sonderzeichen oder Zahlen? Spüre den Zorn von N!";
+ }
+
+ int result = calculate(names);
+ return (names.at(0) + " und " + names.at(1) + " passen nach Angaben von N zu " + std::to_string(result) +
+ "% zusammen. Gratuliere!\n");
+}
+
+Handler::json Handler::relationShipHandler(const string &arguments, const string &session, void *payload) {
+ (void) payload;
+ return Response::simple_response(RelationShipHandler::rsStart(tokenizeArguments(arguments)));
+}