#include #include #include #include #include "../lib/util.h" typedef uint question_bits; int question_score(question_bits q) { int score = 0; while(q) { score += q & 1; q >>= 1; } return score; } int part_1() { InputWithSize *input = load_input_with_size(); bool questions[26] = {0}; question_bits q = 0; int sum = 0; int offset = 0; do { char c = *(input->data_buffer + offset); if (c == '\n') { if (*(input->data_buffer + offset + 1) == '\n') { int count = question_score(q); q = 0; sum += count; offset++; } } else { q |= 1 << (c - 'a'); } offset++; } while(offset < input->size); int count = question_score(q); sum += count; sum--; // No idea free_input_with_size(input); return sum; } int part_2() { InputWithSize *input = load_input_with_size(); bool questions[26] = {0}; question_bits group = UINT_MAX; question_bits member = 0; int sum = 0; int offset = 0; do { char c = *(input->data_buffer + offset); if (c == '\n') { if (*(input->data_buffer + offset + 1) == '\n') { group &= member; int count = question_score(group); group = UINT_MAX; member = 0; sum += count; offset++; } else { group &= member; member = 0; } } else { member |= (1 << (c - 'a')); } offset++; } while(offset < input->size); char c = *(input->data_buffer + offset); member = 0; int count = question_score(group); sum += count; free_input_with_size(input); return sum; } int main() { printf("Part 1: %d\n", part_1()); printf("Part 2: %d\n", part_2()); }