Author: Dieter Buerssner
Date: 17:20:18 06/07/04
Go up one level in this thread
On June 07, 2004 at 19:32:11, Dann Corbit wrote:
>Which accounts for the difference
You were 5 minutes faster. Following C-Prog (really a hack):
#include <stdio.h>
#include <string.h>
int main(void)
{
int np[5];
int i,lineno=0,e,ok=0,fb;
char buf[1024];
static int pos[5*5*5*5*5*5*5*5]; /* Will need 32 bit compiler. */
unsigned int idx;
while (fgets(buf,sizeof buf, stdin))
{
lineno++;
if (strlen(buf) < 8)
continue;
for (i=0; i<5; i++)
np[i] = 0;
idx = 0;
e = 0;
for (i=0; i<8; i++)
{
switch(buf[i])
{
case 'n': case 'N': np[0]++; idx*=5; break;
case 'b': case 'B': np[1]++; idx = idx*5+1;
if (np[1] == 1)
fb = i;
else
{
if (((i^fb) & 1) != 1)
{
fprintf(stderr, "Same color Bs in %s at line %d\n", buf, lineno);
e = 1;
}
}
break;
case 'r': case 'R': np[2]++; idx = idx*5+2;
if (np[2] == 2 && np[4] != 1)
fprintf(stderr, "king not between rooks in %s at line %d\n", buf,
lineno);
break;
case 'q': case 'Q': np[3]++; idx = idx*5+3; break;
case 'k': case 'K': np[4]++; idx = idx*5+4;
if (np[2] != 1)
{
fprintf(stderr, "king not between rooks in %s at line %d\n", buf,
lineno);
e = 1;
}
break;
break;
default:
fprintf(stderr, "unknown piece in %s at line %d\n", buf, lineno);
e = 1;
break;
}
}
for (i=0; i<3; i++)
if (np[i] != 2)
{
fprintf(stderr, "piece %d = %d (!= 2) in %s at line %d\n", i, np[i],
buf, lineno);
e = 1;
break;
}
if (np[3] != 1)
{
fprintf(stderr, "wrong number of queens %d in %s at line %d\n", np[3],
buf, lineno);
e=1;
}
if (np[4] != 1)
{
fprintf(stderr, "wrong number of kings %d in %s at line %d\n", np[4], buf,
lineno);
e=1;
}
if (pos[idx] != 0)
{
fprintf(stderr, "Position %s at line %d already seen at line %d\n", buf,
lineno, pos[idx]);
e=1;
}
pos[idx] = lineno;
if (e==0)
ok++;
}
printf("%d lines processed, %d pos ok\n", lineno, ok);
return 0;
}
takes your list as input. And outputs:
[...]
Same color Bs in rqnknbrb
at line 1670
Same color Bs in rqnkrbnb
at line 1673
Same color Bs in rqnnbkbr
at line 1676
Same color Bs in rqnnkbrb
at line 1679
1680 lines processed, 960 pos ok
Regards,
Dieter
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.