plduhoux
2/23/2018 - 12:55 AM

crosswordFormation

int crosswordFormation(String[] words) {
    int res = 0;
    for (int v1 = 0; v1 < 4; v1++) {
        for (int h1 = 0; h1 < 4; h1++) {
            if (h1 != v1) {
                for (int v2 = 0; v2 < 4; v2++) {
                    if (v2 != v1 && v2 != h1) {
                        int h2 = 0; 
                        while (h2 == v1 || h2 == h1 || h2 == v2) h2++;
                        res += cross2words(words[v1], words[v2], words[h1], words[h2]);
                    }
                }
            }
        }
    }
    return res;
}
//one of the ugliest function I ever wrote...
int cross2words(String v1, String v2, String h1, String h2) {
    int res = 0;
    for (int i = 0; i < v1.length(); i++) {
        for (int j = 0; j < h1.length(); j++) {
            if (v1.charAt(i) == h1.charAt(j)) {
                for (int k = 0; k < v2.length(); k++) {
                    for (int l = j + 1; l < h1.length(); l++) {
                        if (v2.charAt(k) == h1.charAt(l) && l - j > 1) {
                            
    for (int i2 = i + 2; i2 < v1.length(); i2++) {
        for (int j2 = 0; j2 < h2.length(); j2++) {
            if (v1.charAt(i2) == h2.charAt(j2)) {
                for (int k2 = k + 2; k2 < v2.length(); k2++) {
                    for (int l2 = j2 + 1; l2 < h2.length(); l2++) {
                        if (v2.charAt(k2) == h2.charAt(l2) && l2 - j2 > 1) {
                            
if (i < i2 && k < k2 && l - j == l2 - j2 && i2 - i > 1 && i2 - i == k2 - k) {
    res++;
}
                            
                        }
                    }
                }
            }
        }
    }
                            
                        }
                    }
                }
            }
        }
    }
    return res;
}