#include"lib.h" int code[1000], mot[1000000], mot2[1000000]; int i, j, s, k, size, x, pos, a_o, a_i, lim; char mode[20]; fc fi, fo; int check(){ for(*code = x = 0; ;) if(!fi(code, x)){ ici: while(code[x] == a_i-1) if(!x--) return 1; code[x]++; }else{ s = code[x]; for(k = 0; k < size; k++){ mot2[pos = k+x*size] = mot[k+s*size]; if(x == lim-1 && !fo(mot2, pos)) return 0; } if(x == lim-1) goto ici; else code[++x] = 0; } } void usage(){ printf("Usage:check fo [lim]\n"); exit(0); } int main(int ac, char **av){ if(ac < 2) usage(); sprintf(mode, "%s", av[1]); lim = 10; if(!strcmp(mode, "aabaacbaab")) { a_i = 3; fi = rt3; a_o = 2; fo = aabaacbaab; lim = fl(7, 4, 25, 13); }//size = 8 else if(!strcmp(mode, "aabaccb")) { a_i = 3; fi = rt3; a_o = 2; fo = aabaccb; lim = fl(7, 4, 31, 16); }//size = 24 else if(!strcmp(mode, "aabba")) { a_i = 3; fi = rt3; a_o = 2; fo = aabba; lim = fl(7, 4, 25, 13); }//size = 21 else if(!strcmp(mode, "aabbcabba")) { a_i = 3; fi = rt3; a_o = 2; fo = aabbcabba; lim = fl(7, 4, 31, 16); }//size = 102 else if(!strcmp(mode, "aabbcac")) { a_i = 3; fi = rt3; a_o = 2; fo = aabbcac; lim = fl(7, 4, 43, 22); }//size = 86 else if(!strcmp(mode, "aabbcbc")) { a_i = 3; fi = rt3; a_o = 2; fo = aabbcbc; lim = fl(7, 4, 33, 17); }//size = 34 else if(!strcmp(mode, "aabbcc")) { a_i = 3; fi = rt3; a_o = 2; fo = aabbcc; lim = fl(7, 4, 59, 30); }//size = 52 else if(!strcmp(mode, "aabcbc")) { a_i = 3; fi = rt3; a_o = 2; fo = aabcbc; lim = fl(7, 4, 367, 184); }//size = 46 else if(!strcmp(mode, "aabccab")) { a_i = 3; fi = rt3; a_o = 2; fo = aabccab; lim = fl(7, 4, 257, 136); }//size = 34 else if(!strcmp(mode, "aabccba")) { a_i = 3; fi = rt3; a_o = 2; fo = aabccba; lim = fl(7, 4, 19, 10); }//size = 56 else if(!strcmp(mode, "abaab")) { a_i = 3; fi = rt3; a_o = 2; fo = abaab; lim = fl(7, 4, 36, 19); }//size = 10 else if(!strcmp(mode, "abaacbc")) { a_i = 4; fi = rt4; a_o = 2; fo = abaacbc; lim = fl(7, 5, 23, 16); }//size = 17 else if(!strcmp(mode, "abaaccb")) { a_i = 3; fi = rt3; a_o = 2; fo = abaaccb; lim = fl(7, 4, 193, 104); }//size = 74 else if(!strcmp(mode, "abacacb")) { a_i = 3; fi = rt3; a_o = 2; fo = abacacb; lim = fl(7, 4, 15, 8); }//size = 12 else if(!strcmp(mode, "abacbc")) //{ a_i = 5; fi = rt5; a_o = 2; fo = abacbc; lim = fl(5, 4, 4, 3); }//size = 29 { a_i = 4; fi = rt4; a_o = 2; fo = abacbc; lim = fl(7, 5, 41, 29); }//size = 29 else if(!strcmp(mode, "abaccab")) { a_i = 3; fi = rt3; a_o = 2; fo = abaccab; lim = fl(7, 4, 35, 19); }//size = 33 else if(!strcmp(mode, "abaccba")) { a_i = 3; fi = rt3; a_o = 2; fo = abaccba; lim = fl(7, 4, 23, 12); }//size = 14 else if(!strcmp(mode, "abbacca")) { a_i = 3; fi = rt3; a_o = 2; fo = abbacca; lim = fl(7, 4, 13, 7); }//size = 46 else if(!strcmp(mode, "abbaccb")) { a_i = 3; fi = rt3; a_o = 2; fo = abbaccb; lim = fl(7, 4, 33, 17); }//size = 42 else if(!strcmp(mode, "abbcacb")) { a_i = 4; fi = rt4; a_o = 2; fo = abbcacb; lim = fl(7, 5, 10, 7); }//size = 16 else if(!strcmp(mode, "abbcbac")) { a_i = 4; fi = rt4; a_o = 2; fo = abbcbac; lim = fl(7, 5, 13, 9); }//size = 14 else if(!strcmp(mode, "abbcbca")) { a_i = 3; fi = rt3; a_o = 2; fo = abbcbca; lim = fl(7, 4, 59, 30); }//size = 22 else if(!strcmp(mode, "abbccab")) { a_i = 3; fi = rt3; a_o = 2; fo = abbccab; lim = fl(7, 4, 15, 8); }//size = 20 else if(!strcmp(mode, "abcaacb")) { a_i = 3; fi = rt3; a_o = 2; fo = abcaacb; lim = fl(7, 4, 13, 7); }//size = 40 else if(!strcmp(mode, "abcacab")) { a_i = 3; fi = rt3; a_o = 2; fo = abcacab; lim = fl(7, 4, 15, 8); }//size = 10 else if(!strcmp(mode, "abcacb")) { a_i = 6; fi = rt5; a_o = 2; fo = abcacb; lim = fl(5, 4, 4, 3); }//size = 810 else if(!strcmp(mode, "abcbbac")) { a_i = 4; fi = rt4; a_o = 2; fo = abcbbac; lim = fl(7, 5, 17, 12); }//size = 18 else if(!strcmp(mode, "fs")) { a_i = 3; fi = rt3; a_o = 2; fo = fs; lim = fl(7, 4, 15, 8); }//size = 50 else if(!strcmp(mode, "sim3")) { a_i = 3; fi = rt3; a_o = 2; fo = sim3; lim = fl(7, 4, 15, 8); }//size = 8 else if(!strcmp(mode, "sim4")) { a_i = 3; fi = rt3; a_o = 2; fo = sim4; lim = fl(7, 4, 199, 100); }//size = 103 else if(!strcmp(mode, "sim7")) { a_i = 3; fi = rt3; a_o = 2; fo = sim7; lim = fl(7, 4, 15, 8); }//size = 30 else if(!strcmp(mode, "grt23")) { a_i = 4; fi = rt4; a_o = 2; fo = grt23; lim = fl(7, 5, 8, 5); }//size > 305 else if(!strcmp(mode, "grt24")) { a_i = 4; fi = rt4; a_o = 2; fo = grt24; lim = fl(7, 5, 3, 2); }//size = 19 else if(!strcmp(mode, "grt25")) { a_i = 5; fi = rt5; a_o = 2; fo = grt25; lim = fl(5, 4, 7, 5); }//size = 45 else if(!strcmp(mode, "grt26")) { a_i = 5; fi = rt5; a_o = 2; fo = grt26; lim = fl(5, 4, 4, 3); }//size = 76 else if(!strcmp(mode, "grt32")) { a_i = 4; fi = rt4; a_o = 3; fo = grt32; lim = fl(7, 5, 3, 2); }//size = 3 else if(!strcmp(mode, "grt33")) { a_i = 5; fi = rt5; a_o = 3; fo = grt33; lim = fl(5, 4, 4, 3); }//size > 12 else if(!strcmp(mode, "grt34")) // { a_i = 6; fi = rt6; a_o = 3; fo = grt34; lim = fl(6, 5, 5, 4); } { a_i = 5; fi = rt5; a_o = 3; fo = grt34; lim = fl(5, 4, 79, 60); }//size > 12 else if(!strcmp(mode, "grt42")) // { a_i = 6; fi = rt6; a_o = 4; fo = grt42; lim = fl(6, 5, 5, 4); }//size { a_i = 5; fi = rt5; a_o = 4; fo = grt42; lim = fl(5, 4, 21, 16); }//size else if(!strcmp(mode, "rt3p")) { a_i = 5; fi = rt4; a_o = 3; fo = rt3p; }//size = 59 else if(!strcmp(mode, "rt4")) { a_i = 4; fi = rt4; a_o = 4; fo = var; } else if(!strcmp(mode, "rt4p")) { a_i = 6; fi = rt5; a_o = 4; fo = rt4p; lim = fl(5, 4, 61, 44); }//size = 132 else if(!strcmp(mode, "rt5")) { a_i = 5; fi = rt5; a_o = 5; fo = var; }//size else if(!strcmp(mode, "rt5p")) { a_i = 7; fi = rt6; a_o = 5; fo = rt5; lim = fl(6, 5, 5, 4); }//size else usage(); if(ac > 2) lim = atoi(av[2]); FILE *in = fopen("check.txt", "r"); char ch[2000]; for(fgets(ch, 1000, in); strcmp(mode, ch); fgets(ch, 1000, in), ch[strlen(ch)-1] = 0); for(fgets(ch, 1000, in), size = strlen(ch)-1, i = 0; i < a_i; fgets(ch, 1000, in), i++) for(j = 0; j < size; j++) mot[i*size+j] = ch[j]-'0'; fclose(in);//*/ //for(i = 0; i < a_i; i++, printf("\n")) for(j = 0; j < size; j++) printf("%d", mot[i*size+j]); printf("mode=%s a_i=%d a_o=%d size=%d lim=%d", mode, a_i, a_o, size, lim); date(""); if(check()) date("SUCCEDED"); else date("FAILED"); }