82 lines
1.7 KiB
C
82 lines
1.7 KiB
C
|
#include <stdio.h>
|
||
|
|
||
|
int main(int argc, char *argv[]) {
|
||
|
if (argc != 2) {
|
||
|
printf("Usage: %s <input filename>", argv[0]);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
FILE *fp = fopen(argv[1], "r");
|
||
|
if (fp == NULL) {
|
||
|
printf("Could not open file %s", argv[1]);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
// Each line looks like this:
|
||
|
// A X
|
||
|
// One byte Action, one space, one byte Reaction
|
||
|
|
||
|
int score_1 = 0;
|
||
|
int score_2 = 0;
|
||
|
|
||
|
char line[5];
|
||
|
|
||
|
while (fgets(line, sizeof(line), fp)) {
|
||
|
|
||
|
char action = line[0] - 'A'; // Map A-C to 0-2
|
||
|
char reaction = line[2] - 'X'; // Map X-Z to 0-2
|
||
|
|
||
|
// Points for reaction
|
||
|
score_1 += reaction + 1;
|
||
|
|
||
|
// Points for win/draw/lose
|
||
|
int points[] = {3,6,0}; // tie, win, lsoe
|
||
|
score_1 += points[(reaction - action + 3) % 3];
|
||
|
|
||
|
// Part 2
|
||
|
char winstate = reaction;
|
||
|
|
||
|
score_2 += winstate*3;
|
||
|
score_2 += (action + (winstate+2)) % 3 + 1;
|
||
|
|
||
|
}
|
||
|
|
||
|
fclose(fp);
|
||
|
|
||
|
printf("Part 1 Score: %d\n", score_1);
|
||
|
printf("Part 2 Score: %d\n", score_2);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
/* int simplifiedSolution(char action, char reaction) { */
|
||
|
/* int score_1 = 0; */
|
||
|
/* int score_2 = 0; */
|
||
|
|
||
|
/* score_1 += reaction + 1; */
|
||
|
/* if ((reaction - action + 3) % 3 == 1) { */
|
||
|
/* // Win */
|
||
|
/* score_1 += 6; */
|
||
|
/* } else if (action == reaction) { */
|
||
|
/* // Draw */
|
||
|
/* score_1 += 3; */
|
||
|
/* } else { */
|
||
|
/* // Lose */
|
||
|
/* } */
|
||
|
|
||
|
/* if (winstate == 0) { */
|
||
|
/* // Need to lose */
|
||
|
/* score_2 += 0; */
|
||
|
/* score_2 += (action+2) % 3; */
|
||
|
/* } else if (winstate == 1) { */
|
||
|
/* // Need to draw */
|
||
|
/* score_2 += 3; */
|
||
|
/* score_2 += action; */
|
||
|
/* } else { */
|
||
|
/* // Need to win */
|
||
|
/* score_2 += 6; */
|
||
|
/* score_2 += ((action+1) % 3); */
|
||
|
/* } */
|
||
|
/* score_2 += 1; // Because of zero indexing */
|
||
|
/* } */
|