diff options
-rw-r--r-- | 2.c (renamed from 2b.c) | 52 | ||||
-rw-r--r-- | 2a.c | 78 | ||||
-rw-r--r-- | makefile | 2 |
3 files changed, 46 insertions, 86 deletions
@@ -1,6 +1,8 @@ #include <stdio.h> +#include <stdlib.h> #include <string.h> +#include <unistd.h> enum RPS { @@ -58,28 +60,64 @@ rps_gamescore_b(enum RPS a, enum RPS b) int -main() +main(int argc, char ** argv) { + int part = 1, i; char buf[BUFSIZ]; int score = 0; + while ((i = getopt(argc, argv, "p:")) != -1) { + switch (i) { + case 'p': + part = atoi(optarg); + break; + + default: + return -1; + } + } + while (fgets(buf, sizeof(buf), stdin)) { enum RPS a, b; if (strlen(buf) != 4) break; switch (buf[0]) { - case 'A': a = ROCK; break; - case 'B': a = PAPR; break; - case 'C': a = SCRS; break; - default: return 1; + case 'A': a = ROCK; break; + case 'B': a = PAPR; break; + case 'C': a = SCRS; break; + default: + fprintf(stderr, "Unexpected input: %c (0x%2d)\n", buf[0], buf[0]); + return -1; } - switch (buf[2]) { + switch (part) { + case 1: + switch (buf[2]) { + case 'X': b = ROCK; break; + case 'Y': b = PAPR; break; + case 'Z': b = SCRS; break; + default: + fprintf(stderr, "Unexpected input: %c (0x%2d)\n", buf[2], buf[2]); + return -1; + } + break; + + case 2: + switch (buf[2]) { case 'X': b = rps_beats(a); break; case 'Y': b = a; break; case 'Z': b = rps_loses(a); break; - default: return 1; + default: + fprintf(stderr, "Unexpected input: %c (0x%2d)\n", buf[2], buf[2]); + return -1; + } + break; + + default: + fprintf(stderr, "Unexpected puzzle part %d\n", part); + return -1; } + score += rps_pickscore(b) + rps_gamescore_b(a, b); } @@ -1,78 +0,0 @@ - -#include <stdio.h> -#include <string.h> - - -enum RPS { - ROCK, - PAPR, - SCRS, -}; - - -enum RPS -rps_beats(enum RPS rps) -{ - switch (rps) { - case ROCK: return SCRS; - case PAPR: return ROCK; - case SCRS: return PAPR; - } - return -1; -} - - -int -rps_pickscore(enum RPS rps) -{ - switch (rps) { - case ROCK: return 1; - case PAPR: return 2; - case SCRS: return 3; - } - return 0; -} - - -int -rps_gamescore_b(enum RPS a, enum RPS b) -{ - if (b == a) - return 3; - if (rps_beats(b) == a) - return 6; - return 0; -} - - -int -main() -{ - char buf[BUFSIZ]; - int score = 0; - - while (fgets(buf, sizeof(buf), stdin)) { - enum RPS a, b; - - if (strlen(buf) != 4) - break; - switch (buf[0]) { - case 'A': a = ROCK; break; - case 'B': a = PAPR; break; - case 'C': a = SCRS; break; - default: return 1; - } - switch (buf[2]) { - case 'X': b = ROCK; break; - case 'Y': b = PAPR; break; - case 'Z': b = SCRS; break; - default: return 1; - } - score += rps_pickscore(b) + rps_gamescore_b(a, b); - } - - printf("Score: %d\n", score); - - return 0; -} - @@ -3,7 +3,7 @@ CFLAGS=-Wall -O2 all: bin \ bin/1 \ - bin/2a bin/2b \ + bin/2 \ bin/3a bin/3b \ bin/4a bin/4b \ bin/5 \ |