From 72a3388c042f4812e2db33f6d6a1b757392a18a6 Mon Sep 17 00:00:00 2001 From: jacopograndi Date: Thu, 6 Jan 2022 18:33:02 +0100 Subject: day08 --- day08/day08.cpp | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 day08/day08.cpp (limited to 'day08/day08.cpp') diff --git a/day08/day08.cpp b/day08/day08.cpp new file mode 100644 index 0000000..30b818b --- /dev/null +++ b/day08/day08.cpp @@ -0,0 +1,72 @@ +#include +#include +#include +#include + +#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 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 lines, parts; + split(lines, raw, "\n"); + + std::vector 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 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; +} -- cgit v1.2.3-54-g00ecf