Author: Uri Blass
Date: 10:25:09 02/22/05
Go up one level in this thread
On February 22, 2005 at 12:40:52, Anthony Cozzie 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? > >100% untested. > >#include "stdio.h" > >int main(void) >{ > char board[64] = >{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, >fentable = {0, 'n', 'N'}; > > for(int i = 0; i < 4096; i++) { > int wn = i & 0x3F, bn = i >> 6; > if(wn == bn) > continue; > board[wn] = 1; > board[bn] = 2; > > for(int rank = 7; rank >= 0; rank--) { > for(int file = 0, empty = 0; file < 8; file++) { > if(empty && (board[rank*8+file] || file == 7)) { > printf("%d", empty); > empty = 0; > } > else > empty++; > if(board[rank*8+file]) > printf("%c", fentable[board[rank*8+file]]); > } > printf("/"); > } > > printf(" - - 0 1\n"); > board[wn] = board[bn] = 0; > } >} Your code seems to be with the best basis Here are correction to some bugs and hopefully there are no bugs left int main(void) { char board[64] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, fentable[3] = {0, 'n', 'N'}; for(int i = 0; i < 4096; i++) { int wn = i & 0x3F, bn = i >> 6; if(wn == bn) continue; board[wn] = 1; board[bn] = 2; for(int rank = 7; rank >= 0; rank--) { for(int file = 0, empty = 0; file < 8; file++) { if (board[rank*8+file]) { if (empty>0) printf("%d", empty); printf("%c", fentable[board[rank*8+file]]); empty = 0; } else { empty++; if (file==7) printf("%d", empty); } } if (rank>0) printf("/"); } printf(" - - 0 1\n"); board[wn] = board[bn] = 0; } return 0; }
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.