aboutsummaryrefslogtreecommitdiffstats
path: root/src/RelationshipHandler.cpp
blob: 5aab81b91c865ef44e57ce0a939add0824c488c3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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)));
}