1.c 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <assert.h>
  5. #define BUFSZ 1024
  6. char buf[BUFSZ + 1] = {0};
  7. int table[53] = {0};
  8. int decode(char c) {
  9. if (c >= 'A' && c <= 'Z') {
  10. return 26 + c - 'A' + 1;
  11. }
  12. if (c >='a' && c <= 'z') {
  13. return c - 'a' + 1;
  14. }
  15. return -1;
  16. }
  17. int findcommon(char *buf, int len) {
  18. memset(table, 0, 53 * sizeof(int));
  19. len = len / 2;
  20. for (int i = 0; i < len; i++) {
  21. int code = decode(buf[i]);
  22. if (table[code] == 0) {
  23. table[code] = 1;
  24. }
  25. }
  26. for (int i = 0; i < len; i++) {
  27. int code = decode(buf[i + len]);
  28. if (table[code] == 1) return code;
  29. }
  30. return 0;
  31. }
  32. int main() {
  33. FILE *fp = fopen("input", "r");
  34. int sum = 0;
  35. if (fp == NULL) return -1;
  36. while (fgets(buf, BUFSZ, fp)) {
  37. if (strlen(buf) <= 1) continue;
  38. int len = strlen(buf) - 1;
  39. assert((len % 2 == 0) && "len error");
  40. int common = findcommon(buf, len);
  41. sum += common;
  42. }
  43. printf("%d\n", sum);
  44. }