AoC2022/02_02.c
2022-12-03 02:26:39 +01:00

77 lines
1.1 KiB
C

#include <stdio.h>
#define ROCK 1
#define PAPER 2
#define SCISSORS 3
int norm_symb(char s) {
int r = (int) s - 0x40;
if (r > 3 ) {
r -= 0x17;
}
return r;
}
int score(int p1, int p2) {
if (p1 == p2) {
return 3;
}
switch (p2) {
case ROCK:
if (p1 == SCISSORS) return 6;
break;
case PAPER:
if (p1 == ROCK) return 6;
break;
case SCISSORS :
if (p1 == PAPER) return 6;
break;
}
return 0;
}
int symb (int p1, int outcome) {
if (outcome == 2) return p1;
if (outcome == 1) { // need to lose
switch (p1) {
case ROCK:
return SCISSORS;
break;
case PAPER:
return ROCK;
break;
case SCISSORS:
return PAPER;
break;
}
}
switch (p1) { // need to win
case ROCK:
return PAPER;
break;
case PAPER:
return SCISSORS;
break;
case SCISSORS:
return ROCK;
break;
}
}
int main () {
char cur[20];
int p1;
int p2;
int sc = 0;
while (fgets(cur,20,stdin) != NULL) {
p1 = norm_symb(cur[0]);
p2 = symb(p1,norm_symb(cur[2]));
printf("%d %d %d\n", p1,p2, score(p1,p2));
sc += (score(p1,p2) + p2);
}
printf("%d\n", sc);
}