3
int strongPasswordChecker(string password) {4
if (password.size() <= 2)5
return (6 - password.size());7
// is first condition met?9
if (password.size() < 6)10
sizeissue = password.size() - 6;11
else if (password.size() > 20)12
sizeissue = password.size() - 20;14
// is second condition met?15
int chtype = 0, u = 1, l = 1, d = 1;17
if (none_of(password.begin(), password.end(), &::isupper)) {21
if (none_of(password.begin(), password.end(), &::islower)) {25
if (none_of(password.begin(), password.end(), &::isdigit)) {30
// is the third condition met? Note there are 26 letter, the string is31
// constrained under 50, so realistically you can always find some 'other'32
// character not included previously in the string to break the password33
// apart so the consecutive characters are split apart. So need to find34
// the largest sets of consecutive characters or 'blocks', and for these35
// the min is (size of block (-1 if even)/2?36
unsigned int output = 0, i = 0, start, end, issuethree = 0;40
while (i < (password.size() - 2)) {41
if (password[i] == password[i + 1] && password[i] == password[i + 2]) {45
while (c == password[i + 2] && i < (password.size() - 2)) i++;49
// what would the amount of changes be needed?51
issuethree = (end - start + 1) / 3;53
// add the latest issue to total output54
output = output + issuethree;56
// check if the missing second condition issue could resolve any of59
if (islower(c) && (u == 0)) {63
if (sizeissue < 0) sizeissue++;65
if (islower(c) && (d == 0) && issuethree > 0) {69
if (sizeissue < 0) sizeissue++;72
if (isupper(c) && (l == 0)) {76
if (sizeissue < 0) sizeissue++;78
if (isupper(c) && (d == 0) && issuethree > 0) {82
if (sizeissue < 0) sizeissue++;85
if (isxdigit(c) && (l == 0)) {90
if (isxdigit(c) && (u == 0) && issuethree > 0) {94
if (sizeissue < 0) sizeissue++;97
if (c == '!' && (u == 0)) {101
if (sizeissue < 0) sizeissue++;103
if (c == '!' && (d == 0) && issuethree > 0) {107
if (sizeissue < 0) sizeissue++;109
if (c == '!' && (l == 0) && issuethree > 0) {113
if (sizeissue < 0) sizeissue++;116
if (c == '.' && (u == 0)) {120
if (sizeissue < 0) sizeissue++;122
if (c == '.' && (d == 0) && issuethree > 0) {126
if (sizeissue < 0) sizeissue++;128
if (c == '.' && (l == 0) && issuethree > 0) {132
if (sizeissue < 0) sizeissue++;136
// check first issue would resolve this137
if ((-sizeissue) <= issuethree)138
sizeissue = 0; // e.g. aaa140
sizeissue = sizeissue + issuethree; // don't think this option is possible?145
if (chtype > 0 && sizeissue < 0) {146
if (chtype > abs(sizeissue))149
sizeissue = sizeissue + chtype;153
else if (sizeissue == 0) {154
while (i < (password.size() - 2)) {155
if (password[i] == password[i + 1] && password[i] == password[i + 2]) {159
while (c == password[i + 2] && i < (password.size() - 2)) i++;163
// what would the amount of changes be needed?165
issuethree = (end - start + 1) / 3;167
// add the latest issue to total output168
output = output + issuethree;170
// check if the missing second condition issue could resolve any of173
if (islower(c) && (u == 0)) {177
if (sizeissue < 0) sizeissue++;179
if (islower(c) && (d == 0) && issuethree > 0) {183
if (sizeissue < 0) sizeissue++;186
if (isupper(c) && (l == 0)) {190
if (sizeissue < 0) sizeissue++;192
if (isupper(c) && (d == 0) && issuethree > 0) {196
if (sizeissue < 0) sizeissue++;199
if (isxdigit(c) && (l == 0)) {204
if (isxdigit(c) && (u == 0) && issuethree > 0) {208
if (sizeissue < 0) sizeissue++;211
if (c == '!' && (u == 0)) {215
if (sizeissue < 0) sizeissue++;217
if (c == '!' && (d == 0) && issuethree > 0) {221
if (sizeissue < 0) sizeissue++;223
if (c == '!' && (l == 0) && issuethree > 0) {227
if (sizeissue < 0) sizeissue++;230
if (c == '.' && (u == 0)) {234
if (sizeissue < 0) sizeissue++;236
if (c == '.' && (d == 0) && issuethree > 0) {240
if (sizeissue < 0) sizeissue++;242
if (c == '.' && (l == 0) && issuethree > 0) {246
if (sizeissue < 0) sizeissue++;255
else if (sizeissue > 0) {260
// have a vector where it says how many extra characters at the end of a261
// block; e.g. aaa aa = v[2]=1; and in issue three how many blocks;262
while (i < (password.size() - 2)) {263
if (password[i] == password[i + 1] && password[i] == password[i + 2]) {267
while (c == password[i + 2] && i < (password.size() - 2)) i++;271
issuethree = issuethree + (end - start + 1) / 3;272
mod = (end - start + 1) % 3;281
// delete efficiently to ensure most 'blocks of 3' are removed.282
while (sizeissue >= 1 && v[0] > 0) {283
sizeissue = sizeissue - 1;287
while (sizeissue >= 2 && v[1] > 0) {288
sizeissue = sizeissue - 2;293
while (sizeissue >= 3 && v[2] > 0) {294
sizeissue = sizeissue - 3;299
while (sizeissue >= 3 && issuethree > 0) {300
sizeissue = sizeissue - 3;306
// check if the missing second condition issue could resolve any of this308
while (i < (password.size() - 2) && issuethree > 0) {309
if (password[i] == password[i + 1] && password[i] == password[i + 2]) {313
while (c == password[i + 2] && i < (password.size() - 2)) i++;317
// check if the missing second condition issue could resolve any320
if (islower(c) && (u == 0)) {324
if (sizeissue < 0) sizeissue++;326
if (islower(c) && (d == 0) && issuethree > 0) {330
if (sizeissue < 0) sizeissue++;333
if (isupper(c) && (l == 0)) {337
if (sizeissue < 0) sizeissue++;339
if (isupper(c) && (d == 0) && issuethree > 0) {343
if (sizeissue < 0) sizeissue++;346
if (isxdigit(c) && (l == 0)) {351
if (isxdigit(c) && (u == 0) && issuethree > 0) {355
if (sizeissue < 0) sizeissue++;358
if (c == '!' && (u == 0)) {362
if (sizeissue < 0) sizeissue++;364
if (c == '!' && (d == 0) && issuethree > 0) {368
if (sizeissue < 0) sizeissue++;370
if (c == '!' && (l == 0) && issuethree > 0) {374
if (sizeissue < 0) sizeissue++;377
if (c == '.' && (u == 0)) {381
if (sizeissue < 0) sizeissue++;383
if (c == '.' && (d == 0) && issuethree > 0) {387
if (sizeissue < 0) sizeissue++;389
if (c == '.' && (l == 0) && issuethree > 0) {393
if (sizeissue < 0) sizeissue++;403
// add all other changes remaining to be done404
output = output + chtype + abs(sizeissue);