diff --git a/2023/11/main-1.cpp b/2023/11/main-1.cpp new file mode 100644 index 0000000..fb452a2 --- /dev/null +++ b/2023/11/main-1.cpp @@ -0,0 +1,53 @@ +#include +using namespace std; + +int main() { + ios::sync_with_stdio(0); + cin.tie(0); + + vector lines; + string line; + while (getline(cin, line) && !line.empty()) { + lines.push_back(line); + for (char c : line) { + if (c != '.') { + goto next1; + } + } + lines.push_back(line); + next1:; + } + + for (unsigned int col = 0; col < lines[0].size(); col++) { + for (unsigned int row = 0; row < lines.size(); row++) { + if (lines[row][col] != '.') { + goto next2; + } + } + for (auto& l : lines) { + l.insert(l.begin() + col, '.'); + } + col++; + next2:; + } + + vector> gs; + for (unsigned int row = 0; row < lines.size(); row++) { + for (unsigned int col = 0; col < lines[row].size(); col++) { + if (lines[row][col] == '#') { + gs.push_back(make_pair(row, col)); + } + } + } + + int ret = 0; + for (unsigned int i = 0; i < gs.size() - 1; i++) { + auto& gi = gs[i]; + for (unsigned int j = i + 1; j < gs.size(); j++) { + auto& gj = gs[j]; + ret += abs(gi.first - gj.first) + abs(gi.second - gj.second); + } + } + + cout << ret << '\n'; +} diff --git a/2023/11/main-2.cpp b/2023/11/main-2.cpp new file mode 100644 index 0000000..fcac287 --- /dev/null +++ b/2023/11/main-2.cpp @@ -0,0 +1,65 @@ +#include +using namespace std; + +int main() { + ios::sync_with_stdio(0); + cin.tie(0); + + vector lines; + string line; + while (getline(cin, line) && !line.empty()) { + lines.push_back(line); + } + + vector erows, ecols; + + for (unsigned int row = 0; row < lines.size(); row++) { + for (char c : lines[row]) { + if (c != '.') { + goto next1; + } + } + erows.push_back(row); + next1:; + } + + for (unsigned int col = 0; col < lines[0].size(); col++) { + for (unsigned int row = 0; row < lines.size(); row++) { + if (lines[row][col] != '.') { + goto next2; + } + } + ecols.push_back(col); + next2:; + } + + vector> gs; + for (unsigned int row = 0; row < lines.size(); row++) { + for (unsigned int col = 0; col < lines[row].size(); col++) { + if (lines[row][col] == '#') { + gs.push_back(make_pair(row, col)); + } + } + } + + long ret = 0; + for (unsigned int i = 0; i < gs.size() - 1; i++) { + auto& gi = gs[i]; + for (unsigned int j = i + 1; j < gs.size(); j++) { + auto& gj = gs[j]; + ret += abs(gi.first - gj.first) + abs(gi.second - gj.second); + for (int erow : erows) { + if ((erow - gi.first) * (erow - gj.first) < 0) { + ret += 999'999; + } + } + for (int ecol : ecols) { + if ((ecol - gi.second) * (ecol - gj.second) < 0) { + ret += 999'999; + } + } + } + } + + cout << ret << '\n'; +}