4

I am looking into a website with starting positions for chess960.

000 BBQNNRKR
001 BQNBNRKR
002 BQNNRBKR
003 BQNNRKRB
004 QBBNNRKR
005 QNBBNRKR
...
959 RKRNNQBB

So there is a table that converts any number from 0 to 959 to a starting position. For example chess960(518) = 'RNBQKBNR' normal starting chess position.

What is this formula? How can I do this without storing all the table?

  • 1
    The chess960 sites show you how to do it. Generate them and store them. Then you won't have to calculate them every time. – Tony Ennis Jul 2 '14 at 12:03
  • Are you writing a chess program? – Wes Jul 2 '14 at 23:55
  • @wes yes, I am writing a chess server. I want to add ability to play chess960. Currently I have a list of all positions as a list, but having 960 elements is not really nice, especially if there is some formula which can convert a number to this 8 digit string. – Salvador Dali Jul 3 '14 at 1:24
  • 1
    @SalvadorDali why not nice? If you store them in an array it's less than 8KB. Very performance efficient for a server doing a simple O(1) lookup. – Wes Jul 3 '14 at 3:21
  • I wanted a more elegant approach. O(1) looks good from theoretical computer science approach. I hardly doubt that a formula would be that hard. Even if it would be O(n^2) which is highly unlikely for 960 elements even with the crapiest computer right now will run less than 0.1 second. I was also curious how this convention appeared, so it is not only about my chess program. Thanks for taking a look at my problem. – Salvador Dali Jul 3 '14 at 3:27
6

From Wikipedia:

White's Chess960 starting array can be derived from its number N (0 ... 959) as follows:

a) Divide N by 4, yielding quotient N2 and remainder B1. Place a Bishop upon the bright square corresponding to B1 (0=b, 1=d, 2=f, 3=h).

b) Divide N2 by 4 again, yielding quotient N3 and remainder B2. Place a second Bishop upon the dark square corresponding to B2 (0=a, 1=c, 2=e, 3=g).

c) Divide N3 by 6, yielding quotient N4 and remainder Q. Place the Queen according to Q, where 0 is the first free square starting from a, 1 is the second, etc.

d) N4 will be a single digit, 0 ... 9. Place the Knights according to its value by consulting the following table:

0     N   N   -   -   -
1     N   -   N   -   -
2     N   -   -   N   -
3     N   -   -   -   N
4     -   N   N   -   -
5     -   N   -   N   -
6     -   N   -   -   N
7     -   -   N   N   -
8     -   -   N   -   N
9     -   -   -   N   N

e) There are three blank squares remaining; place a Rook in each of the outer two and the King in the middle one.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.