Author: Scott Gasch
Date: 14:06:28 02/22/05
Go up one level in this thread
On February 22, 2005 at 16:46:58, Uri Blass wrote:
>On February 22, 2005 at 15:30:49, Scott Gasch wrote:
>
>>On February 22, 2005 at 13:14:09, Uri Blass 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 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
>>
>>[ scott@wannabe:~/tmp ] % g++34 -O -S aaa.c ; wc -l aaa.s
>> 196 aaa.s
>
>I do not understand what you want to say.
>
>I thought first that you accidentally posted some meaningless string for me but
>I see now that you did the same in response to code of other people.
>
>Uri
It means I think it's stupid to compare lines of C code. As I said before: I
can do it in one line (a really long line).
It means that your solution is 196 lines of x86 assembly language when compiled
with g++34 -O.
The best so far, I guess, is Steffen... who reports something like 148.
Of course we should also be timing the programs too and give an award for
smallest and fastest ;)
Scott
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.