```
/*  Author: Peter Meyer
Conversion to C of Matthew Watkins' Maple code for
his formula for the 384 TWZ data points.
Last mod.: 1996-05-27
*/

int h[64], w[400];

void main(void);
void initialize_h(void);
int mod_64(int i);
int exp_minus_one(int i);
void print_data_points(void);

/*-------------------*/

void initialize_h(void)
{
/*  The "first order of differences"
i.e. the number of lines which change
from one hexagram to the next. */

h[1] = 6;  h[2] = 2;  h[3] = 4;  h[4] = 4;  h[5] = 4;  h[6] = 3;
h[7] = 2;  h[8] = 4;  h[9] = 2; h[10] = 4; h[11] = 6; h[12] = 2;
h[13] = 2; h[14] = 4; h[15] = 2; h[16] = 2; h[17] = 6; h[18] = 3;
h[19] = 4; h[20] = 3; h[21] = 2; h[22] = 2; h[23] = 2; h[24] = 3;
h[25] = 4; h[26] = 2; h[27] = 6; h[28] = 2; h[29] = 6; h[30] = 3;
h[31] = 2; h[32] = 3; h[33] = 4; h[34] = 4; h[35] = 4; h[36] = 2;
h[37] = 4; h[38] = 6; h[39] = 4; h[40] = 3; h[41] = 2; h[42] = 4;
h[43] = 2; h[44] = 3; h[45] = 4; h[46] = 3; h[47] = 2; h[48] = 3;
h[49] = 4; h[50] = 4; h[51] = 4; h[52] = 1; h[53] = 6; h[54] = 2;
h[55] = 2; h[56] = 3; h[57] = 4; h[58] = 3; h[59] = 2; h[60] = 1;
h[61] = 6; h[62] = 3; h[63] = 6; h[64] = h[0] = 3;
}

/*-----------*/
void main(void)
{
int k, a, b;

initialize_h();

for ( k=0; k<=383; k++ )
{
a =    (exp_minus_one((k-1)/32))
* ( h[mod_64(k-1)] - h[mod_64(k-2)]
+ h[mod_64(-k)] - h[mod_64(1-k)] )
+  3 * ( (exp_minus_one((k-3)/96))
* ( h[mod_64((k/3)-1)]
- h[mod_64((k/3)-2)]
+ h[mod_64(-1*(k/3))]
- h[mod_64(1-(k/3))] ) )
+  6 * ( (exp_minus_one((k-6)/192))
* ( h[mod_64((k/6)-1)]
- h[mod_64((k/6)-2)]
+ h[mod_64(-1*(k/6))]
- h[mod_64(1-(k/6))] ) );

b =    ( 9 - h[mod_64(-k)] - h[mod_64(k-1)] )
+  3 * ( 9 - h[mod_64(-1*(k/3))] - h[mod_64((k/3)-1)] ),
+  6 * ( 9 - h[mod_64(-1*(k/6))] - h[mod_64((k/6)-1)] );

w[k] =  abs(a) + abs(b);
}

print_data_points();
}

/*-------------*/
int mod_64(int i)
{
while ( i < 0 )
i += 64;

return ( i%64 );
}

/*--------------------*/
int exp_minus_one(int i)
{
if ( i < 0 )
i *= -1;

return ( i%2 ? -1 : 1 );

}

/*------------------------*/
void print_data_points(void)
{
int j, k=18;

printf("\n%*s",k,"");

for ( j=0; j<384; j++ )
{
printf("%3d",w[j]);
if ( j < 383 )
printf(",");
if ( !((j+1)%10) )
printf("\n%*s",k,"");
}

printf("\n");
}
```