Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Chess programming puzzle

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.