#include #include #include int chrcmp(void const * a, void const * b) { return (*(char const *) a) - *((char const *) b); } int priority(int c) { if (c >= 'A' && c <= 'Z') return 27 + c - 'A'; if (c >= 'a' && c <= 'z') return 1 + c - 'a'; fprintf(stderr, "Unexpected priority request: %c\n", c); return -1; } int main() { char buf[BUFSIZ]; int score = 0; while (fgets(buf, sizeof(buf), stdin)) { int len, i, j; len = strlen(buf); if (len && buf[len - 1] == '\n') --len; if (len % 2 == 1) fprintf(stderr, "Unexpected length: %d\n", len); qsort(buf, len / 2, 1, chrcmp); qsort(buf + len / 2, len / 2, 1, chrcmp); i = 0; j = len / 2; while (i < len / 2 && j < len) { if (buf[i] < buf[j]) ++i; else if (buf[j] < buf[i]) ++j; else break; } if (i >= len / 2 || j >= len) { fprintf(stderr, "No match found in %s\n", buf); return -1; } score += priority(buf[i]); } printf("Score: %d\n", score); return 0; }