From f0ced1a1716fc7e27ad15d71a5d9f2a81a4182c8 Mon Sep 17 00:00:00 2001 From: tslil Date: Mon, 4 Jan 2021 15:48:03 -0500 Subject: Tabs for indentation, spaces for alignment --- src/pptdb.c | 222 +++++++++++++++++++++++++++++------------------------------- 1 file changed, 109 insertions(+), 113 deletions(-) (limited to 'src/pptdb.c') diff --git a/src/pptdb.c b/src/pptdb.c index e335d8e..3812ee4 100644 --- a/src/pptdb.c +++ b/src/pptdb.c @@ -9,123 +9,119 @@ uint64_t heights[16]; // Warning: performs _no_ checks on input whatsoever static enum E_RESULT parse_line(char *pt, const ssize_t read) { - ssize_t idx = 0; - enum E_RESULT r; - for(;;) { - if (pt[idx] == 'P') { - // P [A-F][1-6] [CF]?, - idx+=2; - enum STONE_VARIANT stone; - const uint8_t col = pt[idx]-'A', row = pt[idx+1]-'1'; - - if (idx + 3 < read) { - switch (pt[idx+3]) { - case 'W': { stone = STONE_STANDING; break; } - case 'C': { stone = STONE_CAPSTONE; break; } - default: { stone = STONE_FLAT; break; } - } - } else { stone = STONE_FLAT; } - - /* char buf[100]; */ - /* generate_place(board_size, THE_COORDS(col,row), stone, buf); */ - /* puts(buf); */ - - r = try_place(THE_COORDS(col,row), current_colour, stone); - if (r != ACT_OK) return r; - } else if (pt[idx] == 'M') { - // M [A-F][1-6] [A-F][1-6]( [1-6])+, - idx+=2; - uint8_t drops[board_size]; - const uint8_t s_col =pt[idx]-'A', s_row=pt[idx+1]-'1', - d_col=pt[idx+3]-'A', d_row=pt[idx+4]-'1'; - idx+=4; - - enum MOVE_DIRECTION dir; - if (s_col < d_col) dir=M_RIGHT; - else if (s_col > d_col) dir=M_LEFT; - else if (s_row < d_row) dir=M_UP; - else if (s_row > d_row) dir=M_DOWN; - - uint8_t steps = 0; - do { - idx+=2; - drops[steps++] = pt[idx] - '0'; - } while (idx+21) heights[COUNT_AT(k)]+=1; - } - } - while (idx=read) return ACT_OK; - next_ply(); - } - return ACT_OK; + ssize_t idx = 0; + enum E_RESULT r; + for(;;) { + if (pt[idx] == 'P') { + // P [A-F][1-6] [CF]?, + idx+=2; + enum STONE_VARIANT stone; + const uint8_t col = pt[idx]-'A', row = pt[idx+1]-'1'; + + if (idx + 3 < read) { + switch (pt[idx+3]) { + case 'W': { stone = STONE_STANDING; break; } + case 'C': { stone = STONE_CAPSTONE; break; } + default: { stone = STONE_FLAT; break; } + } + } else { + stone = STONE_FLAT; + } + + r = try_place(THE_COORDS(col,row), current_colour, stone); + if (r != ACT_OK) return r; + } else if (pt[idx] == 'M') { + // M [A-F][1-6] [A-F][1-6]( [1-6])+, + idx+=2; + uint8_t drops[board_size]; + const uint8_t s_col =pt[idx]-'A', s_row=pt[idx+1]-'1', + d_col=pt[idx+3]-'A', d_row=pt[idx+4]-'1'; + idx+=4; + + enum MOVE_DIRECTION dir; + if (s_col < d_col) dir=M_RIGHT; + else if (s_col > d_col) dir=M_LEFT; + else if (s_row < d_row) dir=M_UP; + else if (s_row > d_row) dir=M_DOWN; + + uint8_t steps = 0; + do { + idx+=2; + drops[steps++] = pt[idx] - '0'; + } while (idx+21) heights[COUNT_AT(k)]+=1; + } + } + while (idx=read) return ACT_OK; + next_ply(); + } + return ACT_OK; } int main(int argc, char **argv) { - (void)(argc); - - enum E_RESULT r; - enum WIN_TYPE win; - uint32_t games = 0, overflow=0, illegal = 0; - uint32_t road_wins=0, flat_wins=0, road_turns=0, flat_turns=0; - - for (int k = 0; k < 16; k++) heights[k] = 0; - - FILE *playtak; - ssize_t read; - size_t len = 0; - char *line = NULL; - - const uint8_t size = argv[1][0]-'0'; - playtak = fopen(argv[2], "r"); - if (playtak == NULL) exit(EXIT_FAILURE); - - while ((read = getline(&line, &len, playtak)) != -1) { - reset_state(size); - r = parse_line(line,read); - if (r == ACT_ILLEGAL) { - illegal++; - printf("Culprit: (%ld) %s",read,line); - } else if (r == ACT_OVERFLOW) { - overflow++; - } else { - win = check_win(); - if (win == WIN_FLAT_BLACK || win == WIN_FLAT_WHITE || win == WIN_DRAW) { - flat_wins++; - flat_turns += ply/2+1; - } else if (win == WIN_DRAGON || win == WIN_ROAD_BLACK || win == WIN_ROAD_WHITE){ - road_wins++; - road_turns += ply/2+1; - } - } - games++; - } - - fclose(playtak); - if (line) free(line); - - printf("Read %d games\n",games); - printf("Illegals: %d\nOverflows: %d\nRoad wins: %d\nFlat wins: %d\n\ + (void)(argc); + + enum E_RESULT r; + enum WIN_TYPE win; + uint32_t games = 0, overflow=0, illegal = 0; + uint32_t road_wins=0, flat_wins=0, road_turns=0, flat_turns=0; + + for (int k = 0; k < 16; k++) heights[k] = 0; + + FILE *playtak; + ssize_t read; + size_t len = 0; + char *line = NULL; + + const uint8_t size = argv[1][0]-'0'; + playtak = fopen(argv[2], "r"); + if (playtak == NULL) exit(EXIT_FAILURE); + + while ((read = getline(&line, &len, playtak)) != -1) { + reset_state(size); + r = parse_line(line,read); + if (r == ACT_ILLEGAL) { + illegal++; + printf("Culprit: (%ld) %s",read,line); + } else if (r == ACT_OVERFLOW) { + overflow++; + } else { + win = check_win(); + if (win == WIN_FLAT_BLACK + || win == WIN_FLAT_WHITE + || win == WIN_DRAW) { + flat_wins++; + flat_turns += ply/2+1; + } else { + road_wins++; + road_turns += ply/2+1; + } + } + games++; + } + + fclose(playtak); + if (line) free(line); + + printf("Read %d games\n",games); + printf("Illegals: %d\nOverflows: %d\nRoad wins: %d\nFlat wins: %d\n\ Average turns to road win: %.3f\nAverage turns to flat win: %f\n", - illegal,overflow, road_wins, flat_wins, - (double)(road_turns)/(double)(road_wins), - (double)(flat_turns)/(double)(flat_wins)); - for (int k = 2; k < 16; k++) { - printf("Height %2d: %7ld\n",k,heights[k]); - } - - exit(EXIT_SUCCESS); + illegal,overflow, road_wins, flat_wins, + (double)(road_turns)/(double)(road_wins), + (double)(flat_turns)/(double)(flat_wins)); + for (int k = 2; k < 16; k++) { + printf("Height %2d: %7ld\n",k,heights[k]); + } + + exit(EXIT_SUCCESS); } -- cgit v1.2.3