You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
1.8 KiB
C++
85 lines
1.8 KiB
C++
2 years ago
|
#include <array>
|
||
|
#include <iostream>
|
||
|
#include <string>
|
||
|
|
||
|
int consumeInt(std::string& s)
|
||
|
{
|
||
|
int n = 0;
|
||
|
int i;
|
||
|
|
||
|
for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
|
||
|
n = n * 10 + s[i] - '0';
|
||
|
|
||
|
s = s.substr(i);
|
||
|
return n;
|
||
|
}
|
||
|
|
||
|
int main()
|
||
|
{
|
||
|
std::array<std::array<char, 101>, 165> map;
|
||
|
std::string line;
|
||
|
|
||
|
for (auto& m : map)
|
||
|
m.fill('.');
|
||
|
|
||
|
while (1) {
|
||
|
std::getline(std::cin, line);
|
||
|
if (std::cin.eof())
|
||
|
break;
|
||
|
|
||
|
auto px = consumeInt(line);
|
||
|
line = line.substr(1);
|
||
|
auto py = consumeInt(line);
|
||
|
|
||
|
while (!line.empty()) {
|
||
|
line = line.substr(4);
|
||
|
auto x = consumeInt(line);
|
||
|
line = line.substr(1);
|
||
|
auto y = consumeInt(line);
|
||
|
|
||
|
if (x != px) {
|
||
|
for (auto i = std::min(x, px); i <= std::max(x, px); ++i)
|
||
|
map[y][500 - i + 50] = '#';
|
||
|
} else {
|
||
|
for (auto i = std::min(y, py); i <= std::max(y, py); ++i)
|
||
|
map[i][500 - x + 50] = '#';
|
||
|
}
|
||
|
|
||
|
px = x;
|
||
|
py = y;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int sands = 0;
|
||
|
while (map[0][50] != '*') {
|
||
|
++sands;
|
||
|
int x = 50, y = 0;
|
||
|
while (1) {
|
||
|
if (y > map.size() - 2) {
|
||
|
map[0][50] = '*';
|
||
|
break;
|
||
|
} else if (map[y + 1][x] == '.') {
|
||
|
++y;
|
||
|
} else if (map[y + 1][x + 1] == '.') {
|
||
|
++y, ++x;
|
||
|
} else if (map[y + 1][x - 1] == '.') {
|
||
|
++y, --x;
|
||
|
} else {
|
||
|
map[y][x] = '*';
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for (auto& m : map) {
|
||
|
for (auto& n : m)
|
||
|
std::cout << n;
|
||
|
std::cout << std::endl;
|
||
|
}
|
||
|
|
||
|
std::cout << sands - 1 << std::endl;
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|