parent
201f5d28f6
commit
1f87f1bbde
@ -0,0 +1,62 @@ |
|||||||
|
#include <iostream> |
||||||
|
#include <fstream> |
||||||
|
#include <map> |
||||||
|
#include <vector> |
||||||
|
#include <algorithm> |
||||||
|
using namespace std; |
||||||
|
|
||||||
|
|
||||||
|
int intoPriority(char ch) |
||||||
|
{ |
||||||
|
int initalP = ch; |
||||||
|
if (initalP < 97) |
||||||
|
{ |
||||||
|
initalP -= 38; |
||||||
|
} else {initalP -= 96;} |
||||||
|
return initalP; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
int main() |
||||||
|
{ |
||||||
|
string inputStr; |
||||||
|
ifstream inputFile("input.txt"); |
||||||
|
|
||||||
|
int i {0}; |
||||||
|
// This will be reset every 3 lines
|
||||||
|
map<char,int> itemCounts; |
||||||
|
int badgePrioity {0}; |
||||||
|
while (getline(inputFile, inputStr)) |
||||||
|
{ |
||||||
|
i++; |
||||||
|
// These are the items we've seen this line
|
||||||
|
vector<char> seenVec; |
||||||
|
// Increment the item counter for each item not already seen in this line
|
||||||
|
for (char c: inputStr) |
||||||
|
{ |
||||||
|
// Check that we haven't already seen this char
|
||||||
|
if (find(seenVec.begin(), seenVec.end(), c) != seenVec.end()) {continue;} |
||||||
|
seenVec.push_back(c); |
||||||
|
itemCounts[c]++; |
||||||
|
} |
||||||
|
|
||||||
|
// If this is the 3rd line we need to check for the badge and reset itemCounts
|
||||||
|
if (i%3==0) |
||||||
|
{ |
||||||
|
map<char, int>::iterator itr; |
||||||
|
// Look through the map for something that occured three times
|
||||||
|
for (itr = itemCounts.begin(); itr != itemCounts.end(); itr++) |
||||||
|
{ |
||||||
|
if (itr->second == 3) |
||||||
|
{ |
||||||
|
// Add that items value to our total
|
||||||
|
badgePrioity += intoPriority(itr->first); |
||||||
|
} |
||||||
|
} |
||||||
|
// Erase everything in the count map as we're now in a new group
|
||||||
|
itemCounts.clear(); |
||||||
|
} |
||||||
|
} |
||||||
|
cout << badgePrioity << endl; |
||||||
|
|
||||||
|
} |
||||||
Loading…
Reference in new issue