/* Filter program which reads in a list of dimension-64 integer vectors (where the 64 indices are considered to be subsets of a six-element set {A,B,C,D,E,F} in the order {},{A},{B},{A,B},{C},{A,C},{B,C},{A,B,C},{D},...) and writes out a longer list containing, for each input vector, all vectors obtained from it via permutations of the six-element set (but if the same vector is produced by more than one permutation, it is only printed once). */ #include #include int main() { int perms[720][64]; int invec[64]; int i,j,n; int m1,m2,m3,m4,m5,m6; for ( ; ; ) { for (i = 0; i < 64; i++) { j = scanf(" %d",invec+i); if (j != 1) break; } if (i != 64) break; n = 0; for (m1 = 1; m1 < 64; m1 <<= 1) { for (m2 = 1; m2 < 64; m2 <<= 1) { if (m2 == m1) continue; for (m3 = 1; m3 < 64; m3 <<= 1) { if (m3 == m1 || m3 == m2) continue; for (m4 = 1; m4 < 64; m4 <<= 1) { if (m4 == m1 || m4 == m2 || m4 == m3) continue; for (m5 = 1; m5 < 64; m5 <<= 1) { if (m5 == m1 || m5 == m2 || m5 == m3 || m5==m4) continue; m6 = 63 - m1 - m2 - m3 - m4 - m5; for (i = 0; i < 64; i++) { j = 0; if (i & 1) j |= m1; if (i & 2) j |= m2; if (i & 4) j |= m3; if (i & 8) j |= m4; if (i & 16) j |= m5; if (i & 32) j |= m6; perms[n][i] = invec[j]; } for (j = 0; j < n; j++) { for (i = 0; i < 64; i++) { if (perms[n][i] != perms[j][i]) break; } if (i == 64) break; } if (j < n) continue; if (n > 0) printf(" "); for (i = 0; i < 64; i++) printf(" %d",perms[n][i]); printf("\n"); n++; } } } } } } exit(0); }