diff --git a/advent_of_code/2022/6/main.cpp b/advent_of_code/2022/6/main.cpp index b27a7a2..22b4e66 100644 --- a/advent_of_code/2022/6/main.cpp +++ b/advent_of_code/2022/6/main.cpp @@ -2,35 +2,41 @@ using namespace std; +template +bool check_map_count(const map& m, int size){ + int result = 0; + + for(auto p : m){ + if(p.second > 1){ + return false; + } + result += p.second; + } + + return result == size; +} + int main(){ ifstream input_file("input.txt"); string text; input_file >> text; - deque frame; + map frame; - // Set up - for(int i = 0; i < 4; ++i){ - frame.push_back(text[i]); - } + for(unsigned int i = 0; i < text.length(); ++i){ + if(i >= 14){ + frame[text[i - 14]]--; + } + frame[text[i]]++; - if(frame[0] != frame[1] && frame[0] != frame[2] && frame[0] != frame[3] && - frame[1] != frame[2] && frame[1] != frame[3] && frame[2] != frame[3]){ - - cout << "Marker: " << frame[0] << frame[1] << frame[2] << frame[3] << endl; - return 0; - } - - for(unsigned int i = 4; i < text.length(); ++i){ - frame.pop_front(); - frame.push_back(text[i]); - - if(frame[0] != frame[1] && frame[0] != frame[2] && frame[0] != frame[3] && - frame[1] != frame[2] && frame[1] != frame[3] && frame[2] != frame[3]){ - - // cout << "Marker: " << frame[0] << frame[1] << frame[2] << frame[3] << endl; - cout << i + 1 << endl; + if(check_map_count(frame, 14)){ + for(auto p : frame){ + if(p.second > 0){ + cout << p.first; + } + } cout << endl; + cout << "Answer: " << i + 1 << endl; return 0; } }