Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Chess programming puzzle

Author: Uri Blass

Date: 10:14:09 02/22/05

Go up one level in this thread


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 is my code(not 100% sure of no bugs)

It seems that there are better codes
based on looking at other codes

#include <stdio.h>
int main(void)
{
int whiteknight,blackknight,rank,N,n,empty1,empty2,empty3;
char c1,c2;
for (whiteknight=0;whiteknight<64;whiteknight++)
  for (blackknight=0;blackknight<64;blackknight++)
		if (whiteknight!=blackknight)
		{
			for (rank=7;rank>=0;rank--)
			{
				N=8;
				n=8;
				if ((whiteknight>>3)==rank)
					N=whiteknight&7;
				if ((blackknight>>3)==rank)
					n=blackknight&7;
				if (n<N)
				{
					empty1=n;
					empty2=N-n-1;
					empty3=7-N;
					c1='n';
					c2='N';
				}
				else
				{
					empty1=N;
					empty2=n-N-1;
					empty3=7-n;
					c1='N';
					c2='n';
				}
				if (empty1>0)
				printf("%d",empty1);
				if (empty1<8)
					printf("%c",c1);
				if (empty2>0)
					printf("%d",empty2);
				if (empty3>=0)
					printf("%c",c2);
				if (empty3>0)
					printf("%d",empty3);
				if (rank>0)
					printf("/");
			}
			printf(" w - - 0 1\n");
		}
		return 0;
}

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.