Used sscanf to simplify code
Instead of manually parsing out the game_id and raw_hand manually, use sscanf
This commit is contained in:
parent
b8574fd4d6
commit
0f9839ef49
|
|
@ -12,9 +12,11 @@ run2: clean bin/part02
|
|||
|
||||
test1: clean bin/part01
|
||||
cat data/p01test.txt | bin/part01
|
||||
@echo "8 is correct answer"
|
||||
|
||||
test2: clean bin/part02
|
||||
cat data/p02test.txt | bin/part02
|
||||
@echo "2286 is correct answer"
|
||||
|
||||
bin/part01:
|
||||
$(CC) src/part01.c -o bin/part01
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
|
|
@ -66,30 +66,21 @@ int main(int argc, char *argv[]){
|
|||
|
||||
while (fgets(line, LINE_MAX, stdin) != NULL) {
|
||||
int game_id;
|
||||
char *raw_hand;
|
||||
//debug_printf("raw line: %s\n", line);
|
||||
|
||||
char id_buf[4];
|
||||
int colon_index = (int)(strchr(line, ':') - line);
|
||||
strncpy(id_buf, &line[5], colon_index-5);
|
||||
game_id = atoi(id_buf);
|
||||
//debug_printf("id_buf: -%s- game_id: %d\n", id_buf, game_id);
|
||||
sscanf(line, "Game %d: %m[0-9a-z,; ]\n", &game_id, &raw_hand);
|
||||
|
||||
gameArray[linesProcessed] = (Game){game_id, 0, {(Hand){0,0,0,0}}, (Hand){0,0,0,0}, 1};
|
||||
|
||||
char raw_hand_buffer[LINE_MAX]; //make a buffer to hold the rest of the game info for parsing later
|
||||
memset(raw_hand_buffer, '\0', sizeof(raw_hand_buffer));
|
||||
int end_index = (int)(strchr(line, '\n') - line); //debug_printf("endIndex: %d\n", end_index);
|
||||
strncpy(raw_hand_buffer, &line[colon_index+2], end_index-(colon_index+2));
|
||||
//debug_printf("game_id: %d; raw_hand_buffer: ~~%s~~\n", game_id, raw_hand_buffer);
|
||||
debug_printf("Reconstruct: ~~Game %d: %s~~\n", game_id, raw_hand_buffer);
|
||||
debug_printf("Reconstruct: ~~Game %d: %s~~\n", game_id, raw_hand);
|
||||
|
||||
int hand_index = 0;
|
||||
char count_buf[10] = "";
|
||||
memset(count_buf, '\0', sizeof(count_buf));
|
||||
for (int i = 0; i<=strlen(raw_hand_buffer); i++){
|
||||
char current_char = raw_hand_buffer[i];
|
||||
//debug_printf("i: %d.%d, hand_index: %d; count_buf:~%s~; current_char: %c\n", i, strlen(raw_hand_buffer), hand_index, count_buf, current_char);
|
||||
if (current_char == ';' || i == strlen(raw_hand_buffer)){
|
||||
for (int i = 0; i<=strlen(raw_hand); i++){
|
||||
char current_char = raw_hand[i];
|
||||
//debug_printf("i: %d.%d, hand_index: %d; count_buf:~%s~; current_char: %c\n", i, strlen(raw_hand), hand_index, count_buf, current_char);
|
||||
if (current_char == ';' || i == strlen(raw_hand)){
|
||||
memset(count_buf, '\0', sizeof(count_buf));
|
||||
gameArray[linesProcessed].hands[hand_index].set = 1;
|
||||
gameArray[linesProcessed].num_hands = hand_index+1;
|
||||
|
|
@ -112,6 +103,7 @@ int main(int argc, char *argv[]){
|
|||
memset(count_buf, '\0', sizeof(count_buf));
|
||||
}
|
||||
}
|
||||
free(raw_hand);
|
||||
linesProcessed++;
|
||||
}
|
||||
printf("\n Ingested %d Lines\n", linesProcessed);
|
||||
|
|
|
|||
|
|
@ -80,30 +80,21 @@ int main(int argc, char *argv[]){
|
|||
|
||||
while (fgets(line, LINE_MAX, stdin) != NULL) {
|
||||
int game_id;
|
||||
char *raw_hand;
|
||||
//debug_printf("raw line: %s\n", line);
|
||||
|
||||
char id_buf[4];
|
||||
int colon_index = (int)(strchr(line, ':') - line);
|
||||
strncpy(id_buf, &line[5], colon_index-5);
|
||||
game_id = atoi(id_buf);
|
||||
//debug_printf("id_buf: -%s- game_id: %d\n", id_buf, game_id);
|
||||
sscanf(line, "Game %d: %m[0-9a-z,; ]\n", &game_id, &raw_hand);
|
||||
|
||||
gameArray[linesProcessed] = (Game){game_id, 0, {(Hand){0,0,0,0}}, (Hand){0,0,0,0}, 1};
|
||||
|
||||
char raw_hand_buffer[LINE_MAX]; //make a buffer to hold the rest of the game info for parsing later
|
||||
memset(raw_hand_buffer, '\0', sizeof(raw_hand_buffer));
|
||||
int end_index = (int)(strchr(line, '\n') - line); //debug_printf("endIndex: %d\n", end_index);
|
||||
strncpy(raw_hand_buffer, &line[colon_index+2], end_index-(colon_index+2));
|
||||
//debug_printf("game_id: %d; raw_hand_buffer: ~~%s~~\n", game_id, raw_hand_buffer);
|
||||
debug_printf("Reconstruct: ~~Game %d: %s~~\n", game_id, raw_hand_buffer);
|
||||
debug_printf("Reconstruct: ~~Game %d: %s~~\n", game_id, raw_hand);
|
||||
|
||||
int hand_index = 0;
|
||||
char count_buf[10] = "";
|
||||
memset(count_buf, '\0', sizeof(count_buf));
|
||||
for (int i = 0; i<=strlen(raw_hand_buffer); i++){
|
||||
char current_char = raw_hand_buffer[i];
|
||||
//debug_printf("i: %d.%d, hand_index: %d; count_buf:~%s~; current_char: %c\n", i, strlen(raw_hand_buffer), hand_index, count_buf, current_char);
|
||||
if (current_char == ';' || i == strlen(raw_hand_buffer)){
|
||||
for (int i = 0; i<=strlen(raw_hand); i++){
|
||||
char current_char = raw_hand[i];
|
||||
//debug_printf("i: %d.%d, hand_index: %d; count_buf:~%s~; current_char: %c\n", i, strlen(raw_hand), hand_index, count_buf, current_char);
|
||||
if (current_char == ';' || i == strlen(raw_hand)){
|
||||
memset(count_buf, '\0', sizeof(count_buf));
|
||||
gameArray[linesProcessed].hands[hand_index].set = 1;
|
||||
gameArray[linesProcessed].num_hands = hand_index+1;
|
||||
|
|
@ -126,6 +117,7 @@ int main(int argc, char *argv[]){
|
|||
memset(count_buf, '\0', sizeof(count_buf));
|
||||
}
|
||||
}
|
||||
free(raw_hand);
|
||||
linesProcessed++;
|
||||
}
|
||||
printf("\n Ingested %d Lines\n", linesProcessed);
|
||||
|
|
@ -160,5 +152,4 @@ int main(int argc, char *argv[]){
|
|||
|
||||
printf("sum_of_valid_games: \n%d\n", sum_of_valid_games);
|
||||
printf("sum_of_powers_of_min_cubes: \n%d\n", sum_of_powers_of_min_cubes);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue