charles@zblup:~/charles_work/prog/radiogatun$ time ./generate_trail_equations.php p[0] + a[16] p[2] + a[18] ========================== c'était la round #0 : a[8] + 1 p[1] + a[17] + 1 a[10] a[12] + 1 a[14] p[0] + a[15] + a[16] + 1 a[0] ========================== c'était la round #1 : a[15] + 1 a[1] + 1 a[6] + 1 p[2] + a[18] + 1 a[3] + a[5] + 1 a[4] + a[5] p[0] + p[1] + a[16] + a[17] a[9] a[2] + a[5] + 1 a[7] + a[8] + 1 ========================== c'était la round #2 : a[0] + 1 a[13] p[2] + a[18] + 1 a[10] + a[11] + 1 a[2] a[6] + 1 a[8] + a[11] a[3] a[4] + a[5] p[0] + p[1] + a[16] + a[17] a[9] + a[11] + 1 a[15] + 1 a[12] + 1 a[7] + a[11] + 1 ========================== c'était la round #3 : a[4] p[1] + a[15] + a[17] a[14] + a[15] a[0] a[12] a[6] + 1 p[2] + a[18] + 1 a[2] + 1 p[0] + a[15] + a[16] a[13] + a[15] + 1 ========================== c'était la round #4 : a[15] a[10] + a[11] a[2] a[6] + a[8] + 1 p[2] + a[18] a[3] + a[8] + 1 a[4] + a[8] p[1] + a[17] + 1 a[12] + 1 a[14] + 1 a[9] + 1 a[7] + a[8] + 1 a[0] + a[1] a[5] + a[8] + 1 ========================== c'était la round #5 : a[14] + 1 a[13] a[10] + a[12] + 1 a[1] p[0] + a[16] p[2] + a[18] + 1 a[3] + 1 a[5] + 1 a[6] + a[8] + 1 a[11] + a[12] + 1 a[9] + 1 a[7] + a[8] ========================== c'était la round #6 : ========================== c'était la round #7 : real 0m28.336s user 0m26.930s sys 0m0.596s charles@zblup:~/charles_work/prog/radiogatun$ charles@zblup:~/charles_work/prog/radiogatun$ ./generate_trail_equations.php | ./code_gen // nombre d'inputs possibles à la round #i const int round_inputs[8] = {2,2,2,2,1,2,2,8}; // pour la round #i, avec 0 <= k < round_inputs[i], génère la k-ième input int generate_input(int i, int k, Mill a) { int p0, p1, p2; switch (i) { case 0: p0 = a[16]; p1 = getbit(k, 0); p2 = a[18]; return 4*p2 + 2*p1 + p0; case 1: p0 = a[16] ^ a[15] ^ 1; p1 = a[17] ^ 1; p2 = getbit(k, 0); return 4*p2 + 2*p1 + p0; case 2: p0 = getbit(k, 0); p1 = p0 ^ a[17] ^ a[16]; p2 = a[18] ^ 1; return 4*p2 + 2*p1 + p0; case 3: p0 = getbit(k, 0); p1 = p0 ^ a[17] ^ a[16]; p2 = a[18] ^ 1; return 4*p2 + 2*p1 + p0; case 4: p0 = a[16] ^ a[15]; p1 = a[17] ^ a[15]; p2 = a[18] ^ 1; return 4*p2 + 2*p1 + p0; case 5: p0 = getbit(k, 0); p1 = a[17] ^ 1; p2 = a[18]; return 4*p2 + 2*p1 + p0; case 6: p0 = a[16]; p1 = getbit(k, 0); p2 = a[18] ^ 1; return 4*p2 + 2*p1 + p0; case 7: p0 = getbit(k, 0); p1 = getbit(k, 1); p2 = getbit(k, 2); return 4*p2 + 2*p1 + p0; default: return k; } } //**************************** bool check_belt_independent_state(int i, Mill a) { switch (i) { case 0: return true; case 1: if ((a[8]) != 1) return false; if ((a[10]) != 0) return false; if ((a[12]) != 1) return false; if ((a[0]) != 0) return false; return true; case 2: if ((a[1]) != 1) return false; if ((a[6]) != 1) return false; if ((a[5] ^ a[3]) != 1) return false; if ((a[5] ^ a[4]) != 0) return false; if ((a[9]) != 0) return false; if ((a[5] ^ a[2]) != 1) return false; if ((a[7] ^ a[8]) != 1) return false; return true; case 3: if ((a[0]) != 1) return false; if ((a[10] ^ a[11]) != 1) return false; if ((a[2]) != 0) return false; if ((a[6]) != 1) return false; if ((a[11] ^ a[8]) != 0) return false; if ((a[3]) != 0) return false; if ((a[5] ^ a[4]) != 0) return false; if ((a[11] ^ a[9]) != 1) return false; if ((a[12]) != 1) return false; if ((a[11] ^ a[7]) != 1) return false; return true; case 4: if ((a[4]) != 0) return false; if ((a[0]) != 0) return false; if ((a[12]) != 0) return false; if ((a[6]) != 1) return false; if ((a[2]) != 1) return false; return true; case 5: if ((a[10] ^ a[11]) != 0) return false; if ((a[2]) != 0) return false; if ((a[6] ^ a[8]) != 1) return false; if ((a[8] ^ a[3]) != 1) return false; if ((a[4] ^ a[8]) != 0) return false; if ((a[12]) != 1) return false; if ((a[9]) != 1) return false; if ((a[7] ^ a[8]) != 1) return false; if ((a[0] ^ a[1]) != 0) return false; if ((a[5] ^ a[8]) != 1) return false; return true; case 6: if ((a[10] ^ a[12]) != 1) return false; if ((a[1]) != 0) return false; if ((a[3]) != 1) return false; if ((a[5]) != 1) return false; if ((a[6] ^ a[8]) != 1) return false; if ((a[11] ^ a[12]) != 1) return false; if ((a[9]) != 1) return false; if ((a[7] ^ a[8]) != 0) return false; return true; case 7: return true; default: return true; } }