Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <vector>
- #include <string>
- int find_horiz(std::vector<std::string> map, int far) {
- for (int i = 0; i < map.size() - 1; i++) {
- int dist = 0;
- int j = i, k = i + 1;
- while (dist <= far && j >= 0 && k < map.size()) {
- for (int m = 0; m < map[0].size(); m++) {
- dist += (map[j][m] != map[k][m]);
- }
- j--;
- k++;
- }
- if (dist == far) {
- return i + 1;
- }
- }
- return 0;
- };
- int find_vert(std::vector<std::string> map, int far) {
- std::vector<std::string> new_map;
- for (int i = 0; i < map[0].size(); i++) {
- std::string temp;
- for (int j = 0; j < map.size(); j++) {
- temp += map[j][i];
- }
- new_map.push_back(temp);
- }
- return find_horiz(new_map, far);
- return 0;
- };
- int main() {
- std::vector<std::vector<std::string>> maps;
- std::vector<std::string> map;
- std::ifstream input("input.txt");
- if (input.is_open()) {
- while(input.good()) {
- if (input.eof()) {break;}
- std::string temp;
- std::getline(input, temp);
- if (temp != "") {
- map.push_back(temp);
- } else {
- maps.push_back(map);
- map.clear();
- }
- }
- }
- int total1 = 0, total2 = 0;
- for (int i = 0; i < maps.size(); i++) {
- if (find_horiz(maps[i], 0)) {total1 += 100 * find_horiz(maps[i], 0);}
- else {total1 += find_vert(maps[i], 0);}
- if (find_horiz(maps[i], 1)) {total2 += 100 * find_horiz(maps[i], 1);}
- else {total2 += find_vert(maps[i], 1);}
- }
- std::cout << "Part 1: " << total1 << std::endl;
- std::cout << "Part 2: " << total2;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement