rendered paste bodycharles@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;
}
}