diff options
author | jacopograndi <jacopo.grandi@outlook.it> | 2022-01-06 18:44:53 +0100 |
---|---|---|
committer | jacopograndi <jacopo.grandi@outlook.it> | 2022-01-06 18:44:53 +0100 |
commit | 6f96b2014b053a2e6e5a37464ca6fc578607fda7 (patch) | |
tree | cdb4686352eeadb2225b984ab56819c7de285af4 /day08/day08.cpp | |
parent | 9f7b0cd76272068588d0a7220408f91390c5b583 (diff) |
rm
Diffstat (limited to 'day08/day08.cpp')
-rw-r--r-- | day08/day08.cpp | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/day08/day08.cpp b/day08/day08.cpp deleted file mode 100644 index 30b818b..0000000 --- a/day08/day08.cpp +++ /dev/null @@ -1,72 +0,0 @@ -#include <iostream> -#include <fstream> -#include <vector> -#include <string> - -#include "../utils.h" - -int distance (std::string a, std::string b) { - int d = 0; - for (auto k : b) { - if (a.find(k) == std::string::npos) d++; - } return d; -} - -int map (std::vector<std::string> tries, std::string dig) { - if (dig.size() == 2) return 1; - if (dig.size() == 3) return 7; - if (dig.size() == 4) return 4; - if (dig.size() == 7) return 8; - if (dig.size() == 4) return 8; - - std::string one = *std::find_if(std::begin(tries), std::end(tries), - [](std::string &str){ return str.size() == 2; }); - std::string four = *std::find_if(std::begin(tries), std::end(tries), - [](std::string &str){ return str.size() == 4; }); - if (dig.size() == 5) { - if (distance(dig, one) == 0) return 3; - if (distance(dig, four) == 1) return 5; - return 2; - } - if (dig.size() == 6) { - if (distance(dig, one) == 1) return 6; - if (distance(dig, four) == 0) return 9; - } - return 0; -} - -int main (int argc, char *argv[]) { - std::string raw; - std::getline(std::ifstream(argv[1]), raw, '\0'); - std::vector<std::string> lines, parts; - split(lines, raw, "\n"); - - std::vector<int> count; - for (int i=0; i<8; i++) count.push_back(0); - - int sum = 0; - for (auto line : lines) { - if (line.size() == 0) continue; - parts.clear(); - split(parts, line, " | "); - - std::vector<std::string> tries, digits; - split(tries, parts[0], " "); - split(digits, parts[1], " "); - - int i = 1000; - int num = 0; - for (auto dig : digits) { - count[dig.size()]++; - num += i*map(tries, dig); - i/=10; - } - sum += num; - } - - std::cout << "digits: " << count[2] + count[3] + count[4] + count[7] - << std::endl; - std::cout << "sum: " << sum << std::endl; - - return 0; -} |