Finished aoc day 6, refactored code a lot so it is way prettier now
This commit is contained in:
@@ -2,35 +2,41 @@
|
||||
|
||||
using namespace std;
|
||||
|
||||
template <typename T>
|
||||
bool check_map_count(const map<T, int>& 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<char> frame;
|
||||
map<char, int> 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;
|
||||
if(check_map_count(frame, 14)){
|
||||
for(auto p : frame){
|
||||
if(p.second > 0){
|
||||
cout << p.first;
|
||||
}
|
||||
|
||||
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;
|
||||
} cout << endl;
|
||||
cout << "Answer: " << i + 1 << endl;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user