Author: Anthony Cozzie
Date: 06:16:09 12/07/03
Go up one level in this thread
On December 07, 2003 at 05:24:15, Vincent Lejeune wrote:
>I think it should be interresting to get sub-sum with "white to move" and "black
>to move", is it possible ?
sure. I'm going to go ahead and write something that analyzes the size of TBs,
so I'll throw that in there too . . .
anthony
>On December 06, 2003 at 15:04:14, Anthony Cozzie wrote:
>
>>I didn't see the size of the TB in the TBS file, which is sort of annoying, but
>>this program should generate a sorted list of the 6 man tbs and their winning
>>percentages (assuming I understand the TBS file correctly). Could you run it
>>and post the results?
>>
>>anthony
>>
>>------------------------------------------
>>#include "stdio.h"
>>#include "dirent.h"
>>#include <list>
>>
>>using namespace std;
>>
>>struct tbinfo
>>{
>> float pct;
>> int size;
>> char id[24];
>>
>> bool operator<(struct tbinfo &a) { return pct < a.pct; }
>>};
>>
>>typedef struct tbinfo tbinfo;
>>
>>//Parses a tbs file into the relevant statistics.
>>//returns 1 on error, 0 on success. Currently assumes
>>//all TBs have less than 2^31 wins/draws/losses etc.
>>int parse_tbs_file(tbinfo &ti, const char *fname)
>>{
>> char buffer[1024];
>> FILE *fp;
>> double wins = 0, draws = 0, losses = 0;
>> int t;
>>
>> if(!(fp = fopen(fname, "r"))) return 1;
>>
>> while(fgets(buffer, sizeof(buffer), fp) != NULL)
>> {
>> if( sscanf(buffer, "wtm: Lost in %*d: %d", &t) == 1)
>> losses += t;
>> else if(sscanf(buffer, "btm: Lost in %*d: %d", &t) == 1)
>> wins += t;
>> else if(sscanf(buffer, "wtm: Draws: %d", &t) == 1)
>> draws += t;
>> else if(sscanf(buffer, "btm: Draws: %d", &t) == 1)
>> draws += t;
>> else if(sscanf(buffer, "wtm: Mate in %*d: %d", &t) == 1)
>> wins += t;
>> else if(sscanf(buffer, "btm: Mate in %*d: %d", &t) == 1)
>> losses += t;
>> }
>>
>> fclose(fp);
>>
>> ti.pct = (float)((wins + draws / 2) / (wins + draws + losses));
>>
>> return 0;
>>}
>>
>>int parse_tbs_directory(list<tbinfo> &tbi, const char *dname)
>>{
>> char fname_buffer[1024];
>> tbinfo ti;
>> struct dirent *de;
>> DIR *d;
>>
>>
>> if(!(d = opendir(dname))) return 1;
>>
>> while((de = readdir(d)) != NULL) {
>> if(strcmp(".", de->d_name) == 0 || strcmp("..", de->d_name) == 0)
>> continue;
>>
>> sscanf(de->d_name, "%[^.]", ti.id);
>> if(strlen(ti.id) > 5) {
>> sprintf(fname_buffer, "%s/%s", dname, de->d_name);
>> parse_tbs_file(ti, fname_buffer);
>> tbi.push_back(ti);
>> }
>> }
>> closedir(d);
>>
>> return 0;
>>}
>>
>>int main(int argc, char* argv[])
>>{
>> list<tbinfo> tbi;
>>
>> if(argc < 2) { printf("Usage: %s [TBS file director]\n", argv[0]); exit(-1); }
>>
>> tbi.clear();
>> parse_tbs_directory(tbi, argv[1]);
>> tbi.sort();
>>
>> for(list<tbinfo>::iterator i = tbi.begin(); i != tbi.end(); i++)
>> printf("%-6s %.2f%%\n", (*i).id, (*i).pct * 100.0f);
>>
>> 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.