Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Chess programming puzzle

Author: Uri Blass

Date: 11:25:47 02/22/05

Go up one level in this thread


On February 22, 2005 at 14:10:10, Tim Foden wrote:

>On February 22, 2005 at 08:35:07, Andrew Wagner wrote:
>
>>Hi all.
>>I got sidetracked this morning by an interesting chess programming problem. It
>>took me a couple hours, but I think I have a working algorithm -- haven't tested
>>yet though. Anyway, I got to wondering if others would approach it the same way.
>>So I thought I'd make a little competition of it. Post your code here, and I'll
>>pick the program I like best and shower praise and adulation on its author. If
>>people like this challenge, maybe I'll do one each month or something. Anyway,
>>here's the one I did this morning:
>>There are 64 x 63 = 4032 ways to put a black knight and white knoght both on a
>>chess board. Write a program -- from scratch -- to generate FENs for each of
>>these positions. The FENs should look something like: Nn6/8/8/8/8/8/8/8 w - - 0
>>1.
>>
>>I think my code will wind up weighing in at around 60-70 lines of C. Can you do
>>better?
>
>Here's my attempt, although I did squidge the lines together a bit (20 lines) :)
>
>#include <stdio.h>
>int main( int, char** ) {
>    for( int i = 0; i < 64; i++ ) {
>        for( int j = 0; j < 64; j++ ) {
>            if( i == j ) continue;
>            for( int cnt = 0, k = 0; k < 64; k++ ) {
>                if( k && (k & 7) == 0 ) printf( "/" );
>                if( k == i || k == j ) {
>                    if( cnt != 0 ) { printf( "%d", cnt ); cnt = 0; }
>                    printf( k == i ? "N" : "n" );
>                } else {
>                    cnt++;
>                    if( (k & 7) == 7 ) { printf( "%d", cnt ); cnt = 0; }
>                }
>            }
>            printf( " - - 0 1\n" );
>        }
>    }
>    return 0;
>}
>
>Cheers, Tim.

Thanks
it seems to be the best solution.
unlike other solutions that looked at every rank you simply look at every square
in the board and try to find what to print.

This idea seems to be good also for generalization to write a function that gets
all the fen of 3 and 4 and 5 pieces(I think to use it for debugging the nalimov
tablebases and also debugging my function to detect correct fen)

Uri



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.