Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Chess programming puzzle

Author: Scott Gasch

Date: 12:19:45 02/22/05

Go up one level in this thread


What sense does it make to measure lines of C code?  You can do it in one line!

Anyway, two small refinements to Anthony's code are to put the board as a static
global so that it is zeroed out by the loader (instead of your code) and to get
rid of the fentable and just put 'n' and 'N' on the board.

Might I suggest a better way to measure?  g++ -O -S foo.c; wc -l foo.s.  Also
interestingly:

[ scott@wannabe:~/tmp ] % g++34 -S foo.c ; wc -l foo.s
     193 foo.s
[ scott@wannabe:~/tmp ] % g++34 -O -S foo.c ; wc -l foo.s
     161 foo.s
[ scott@wannabe:~/tmp ] % g++34 -O2 -S foo.c ; wc -l foo.s
     174 foo.s
[ scott@wannabe:~/tmp ] % g++34 -O3 -S foo.c ; wc -l foo.s
     174 foo.s
[ scott@wannabe:~/tmp ] % g++34 -O4 -S foo.c ; wc -l foo.s
     174 foo.s

FWIW:

#include "stdio.h"
static char board[64];
int main(void)
{
    for(int i = 0; i < 4096; i++) {
        int wn = i & 0x3F, bn = i >> 6;
        if(wn == bn) continue;
        board[wn] = 'n'; board[bn] = 'N';
        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+!board[rank*8+file]);
                    empty = 0;
                } else
                    empty++;
                if(board[rank*8+file]) printf("%c", board[rank*8+file]);
            }
            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.