A slightly more descriptive, less error-prone (and also "shorter") implementation would initialize the table using a (static) function, like in the following example:hgm wrote:I don't think that producing readable code is "against established principles of software development". When I have a 2-dimensional 18 x 18 table with initialized data, likeRas wrote:That's why people give useful names to variables and defines - then this doesn't happen. Of course, the aim to produce the shortest source text possible somewhat collides with established principles of software development, so you are in hacking territory.
you should try once to see how it looks when you use long, descriptive variable names...Code: Select all
int table[][] = { { X, 0, Y, 0, X, 0, N, 0, X, 0, Y, 0, X, 0, Y, 0, X, 0 }, { 0, N, 0, Y, 0, N, 0, X, 0, N, 0, Y, 0, N, 0, X, 0, N }, { X, 0, Y, 0, X, 0, N, 0, X, 0, Y, 0, X, 0, Y, 0, X, 0 }, { 0, N, 0, Y, 0, N, 0, X, 0, N, 0, Y, 0, N, 0, X, 0, N }, { X, 0, Y, 0, X, 0, N, 0, X, 0, Y, 0, X, 0, Y, 0, X, 0 }, { 0, N, 0, Y, 0, N, 0, X, 0, N, 0, Y, 0, N, 0, X, 0, N }, { X, 0, Y, 0, X, 0, N, 0, X, 0, Y, 0, X, 0, Y, 0, X, 0 }, { 0, N, 0, Y, 0, N, 0, X, 0, N, 0, Y, 0, N, 0, X, 0, N }, { X, 0, Y, 0, X, 0, N, 0, X, 0, Y, 0, X, 0, Y, 0, X, 0 }, { 0, N, 0, Y, 0, N, 0, X, 0, N, 0, Y, 0, N, 0, X, 0, N }, { X, 0, Y, 0, X, 0, N, 0, X, 0, Y, 0, X, 0, Y, 0, X, 0 }, { 0, N, 0, Y, 0, N, 0, X, 0, N, 0, Y, 0, N, 0, X, 0, N }, { X, 0, Y, 0, X, 0, N, 0, X, 0, Y, 0, X, 0, Y, 0, X, 0 }, { 0, N, 0, Y, 0, N, 0, X, 0, N, 0, Y, 0, N, 0, X, 0, N }, { X, 0, Y, 0, X, 0, N, 0, X, 0, Y, 0, X, 0, Y, 0, X, 0 }, { 0, N, 0, Y, 0, N, 0, X, 0, N, 0, Y, 0, N, 0, X, 0, N }, { X, 0, Y, 0, X, 0, N, 0, X, 0, Y, 0, X, 0, Y, 0, X, 0 }, { 0, N, 0, Y, 0, N, 0, X, 0, N, 0, Y, 0, N, 0, X, 0, N } }
Code: Select all
int table[18][18];
static void initTable()
{
for (int rank = 0; rank < 18; rank++) {
for (int file = 0; file < 18; file++) {
if ((rank + file) % 2) == 0) {
table[rank][file] = 0;
} else
if ((rank % 2) == 0) {
table[rank][file] =
((file % 4) == 0) ? X :
(file == 6) ? N : Y;
} else {
table[rank][file] =
(((file - 1) % 4) == 0) ? N :
(((file - 1) % 8) == 2) ? Y : X;
}
}
}
}