Hooray, another easy one. After Day number 3, I could certainly use it. This challenge involved taking a list of passphrases, and counting up the number of passphrases that had no duplicate words. This seems simple, just a split, sort and application of std::unique.
Part 2 had me check for anagrams rather than duplicate words. This was also easy, as I could map over a sort function to each word in the passphrase, and then check for uniqueness.
Let’s look at the code
#include <algorithm>
#include <iostream>
#include <string>
#include "algo.h"
#include "input.h"
std::string sortString(std::string s) {
std::sort(s.begin(), s.end());
return s;
}
bool isUnique(const std::string& passphrase) {
auto words = algo::map(input::split(passphrase), sortString);
std::sort(words.begin(), words.end());
return words.end() == std::unique(words.begin(), words.end());
}
int main() {
auto passPhrases = input::readMultiLineFile("input/input04.txt");
auto count = std::count_if(passPhrases.begin(), passPhrases.end(), isUnique);
std::cout << count << "\n";
return 0;
}
Super straight forward. I think the trickiest thing was std::unique, because I didn’t realize it returned the end iterator of the range. But once I figured that out, this wasn’t so bad.
Stay tuned for day 5!