Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- const char* input = R"(vJrwpWtwJgWrhcsFMMfFFhFp
- jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
- PmmdzqPrVvPwwTWBwg
- wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
- ttgJtRGJQctTZtZT
- CrZsJsPPZsGzwwsLwLmpwMDw
- )";
- int getPriority(char c)
- {
- if (c > 'Z')
- return c - 'a' + 1;
- return c - 'A' + 27;
- }
- int processSack(int from, int count, int tripletPos)
- {
- static char basket[52] = { 0 };
- if (0 == tripletPos)
- memset(basket, 0, sizeof basket);
- for (int i = 0; i < count; i++)
- {
- char c = input[from + i];
- int priority = getPriority(c);
- basket[priority - 1] |= (1 << tripletPos);
- if (0b0111 == basket[priority - 1])
- return priority;
- }
- return 0;
- }
- int main()
- {
- int sum = 0;
- int from = 0;
- int count = 0;
- int tripletPos = 0;
- while (input[from + count])
- {
- count++;
- char c = input[from + count];
- if ('\n' == c)
- {
- if (count % 2)
- return -1; // odd count of items => input error
- sum += processSack(from, count, tripletPos);
- from += count + 1;
- count = 0;
- tripletPos++;
- tripletPos = tripletPos % 3;
- continue;
- }
- if ((c >= 'a') && (c <= 'z'))
- continue;
- if ((c >= 'A') && (c <= 'Z'))
- continue;
- return -1; // invalid character => input error
- }
- printf("%d\n", sum);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement