aboutsummaryrefslogtreecommitdiff
path: root/day08/day08.cpp
diff options
context:
space:
mode:
authorjacopograndi <jacopo.grandi@outlook.it>2022-01-06 18:44:53 +0100
committerjacopograndi <jacopo.grandi@outlook.it>2022-01-06 18:44:53 +0100
commit6f96b2014b053a2e6e5a37464ca6fc578607fda7 (patch)
treecdb4686352eeadb2225b984ab56819c7de285af4 /day08/day08.cpp
parent9f7b0cd76272068588d0a7220408f91390c5b583 (diff)
rm
Diffstat (limited to 'day08/day08.cpp')
-rw-r--r--day08/day08.cpp72
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;
-}