#include "common.h" namespace aoc2022 { struct rucksacks { char rs1[52] = {0}; char rs2[52] = {0}; char rs3[52] = {0}; void reset() { memset(rs1, 0, 52); memset(rs2, 0, 52); memset(rs3, 0, 52); } void load(const char *p, char rs[], int len) { int i{0}; while (i++ < len) { char c = *p; if ( c >= 'a' && c <= 'z') { rs[c - 'a'] += 1; } if ( c >= 'A' && c <= 'Z') { rs[c - 'A' + 26] += 1; } p++; } } void load(line_view lv) { int len = (lv.length - 1) / 2; const char *p1 = lv.line; const char *p2 = lv.line + len; load(p1, rs1, len); load(p2, rs2, len); } void load(line_view lv, int i) { int len = (lv.length - 1); const char *p = lv.line; switch (i) { case 0: load(p, rs1, len); break; case 1: load(p, rs2, len); break; case 2: load(p, rs3, len); break; } } int score() const noexcept { for (int i = 0; i < 52; i++) { if (rs1[i] > 0 && rs2[i] > 0) { return i+1; } } return 0; } int score3() const noexcept { for (int i = 0; i < 52; i++) { if (rs1[i] > 0 && rs2[i] > 0 && rs3[i] > 0) { return i+1; } } return 0; }}; std::pair day3(line_view file); }