/*
你需要书写一个程序验证给定的密码是否合格。
合格的密码要求:
∙长度不少于 8
∙必须包含大写字母、小写字母、数字、特殊字符中的至少三种
∙不能分割出两个独立的、长度大于 2 的连续子串,使得这两个子串完全相同;更具体地,如果存在两个长度大于 2 的独立子串 s1,s2,使得 s1=s2,那么密码不合法。
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int check(char* mima) {
char* p = NULL;
int count = 0;
for (p = mima ; *p != '\n' ; p++) {
if ((33 <= *p && *p <= 47) || (58 <= *p && *p <= 64) || (91 <= *p &&
*p <= 96) || (123 <= *p && *p <= 126)) {
count++;
break;
}
}
for (p = mima ; *p != '\n' ; p++) {
char gg = *p;
if (48 <= *p && *p <= 57) {
count++;
break;
}
}
for (p = mima ; *p != '\n' ; p++) {
if (65 <= *p && *p <= 90) {
count++;
break;
}
}
for (p = mima ; *p != '\n' ; p++) {
if (97 <= *p && *p <= 122) {
count++;
break;
}
}
if (count >= 3) {
return 1;
}
return -1;
}
int main() {
int i = 0, j = 0;
int result = 0;
char* start = NULL, *find = NULL;
char buf[10000];
while (fgets(buf, sizeof(buf), stdin)) {
int str_len = strlen(buf);
if (str_len < 9) {
printf("NG\n");
continue;
}
if (check(buf) < 0) {
printf("NG\n");
continue;
}
result = 0;
for (i = 3; i < str_len; i++) {
char aa, bb;
start = buf;
while (strlen(start) > i ) {
aa = *start;
find = buf;
while (strlen(find) > i ) {
bb = *find;
if (find <= start - i || find >= start + i) {
if (strncmp(start, find, i) == 0) {
result = 1;
break;
}
}
find++;
}
if (result == 1) {
break;
}
start++;
}
}
if (result == 0) {
printf("OK\n");
} else {
printf("NG\n");
}
}
return 0;
}