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.