Author: expack1234
Date: 08:12:02 02/23/05
Go up one level in this thread
On February 22, 2005 at 21:14:46, Dann Corbit wrote:
>It would be a simple matter to generate the FEN strings from these lists also:
>
>const char *noKnights[] =
>{
> "8", NULL
>};
>const char *oneKnight[] =
>{
> "1N6", "1n6", "2N5", "2n5", "3N4", "3n4", "4N3", "4n3",
> "5N2", "5n2", "6N1", "6n1", "7N", "7n", "N7", "n7", NULL
>};
>const char *twoKnights[] =
>{
> "1N1n4", "1n1N4", "1N2n3", "1n2N3", "1N3n2", "1n3N2",
> "1n4N1", "1N4n1", "1n5N", "1N5n", "1Nn5", "1nN5", "2n1N3",
> "2N1n3", "2N2n2", "2n2N2", "2n3N1", "2N3n1", "2n4N", "2N4n",
> "2Nn4", "2nN4", "3N1n2", "3n1N2", "3N2n1", "3n2N1", "3N3n",
> "3n3N", "3Nn3", "3nN3", "4n1N1", "4N1n1", "4n2N", "4N2n", "4nN2",
> "4Nn2", "5n1N", "5N1n", "5Nn1", "5nN1", "6nN", "6Nn", "n1N5",
> "N1n5", "n2N4", "N2n4", "N3n3", "n3N3", "N4n2", "n4N2", "n5N1",
> "N5n1", "N6n", "n6N", "Nn6", "nN6", NULL
>};
It's ofcourse 100% inflexible, but it's an example of precalculation, and the
code is very readable.
#include <stdio.h>
#define File(x) (x & 7)
#define Rank(x) (x >> 3)
const char *oneOnRank[16] = {"n7","1n6","2n5","3n4","4n3","5n2","1n6","7n",
"N7","1N6","2N5","3N4","4N3","5N2","6N1","7N"};
const char *twoOnRank[8][7] = {
{"Nn6","N1n5","N2n4","N3n3","N4n2","N5n1","N6n"},
{"nN6","1Nn5","1N1n4","1N2n3","1N3n2","1N4n1","1N5n"},
{"n1N5","1nN5","2Nn4","2N1n3","2N2n2","2N3n1","2N4n"},
{"n2N4","1n1N4","2nN4","3Nn4","3N1n2","3N2n1","3N3n"},
{"n3N3","1n2N3","2n1N3","3nN3","4Nn2","4N1n1","4N2n"},
{"n4N2","1n3N2","2n2N2","3n1N2","4nN2","5Nn1","5N1n"},
{"n5N1","1n4N1","2n3N1","3n2N1","4n1N1","5nN1","6Nn"},
{"n6N","1n5N","2n4N","3n3N","4n2N","5n1","6nN"}
};
int main() {
for(int i=0;i<64;i++) {
for(int j=0;j<64;j++) {
if(i == j)
continue;
for(int rank=0;rank<8;rank++) {
if(rank != Rank(i) && rank != Rank(j))
printf("8");
else if(rank == Rank(i) && rank != Rank(j))
printf(oneOnRank[File(i) + 8]);
else if(rank == Rank(j) && rank != Rank(i))
printf(oneOnRank[File(j)]);
else
printf(twoOnRank[File(i)][File(j)]);
if(rank < 7)
printf("/");
}
printf(" w - - 0 1\n");
}
}
return 0;
}
Henk Bossinade
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.