add day 14 c++
parent
e23196f20f
commit
ba888c6728
@ -0,0 +1,84 @@
|
||||
#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;
|
||||
}
|
||||
|
@ -0,0 +1,84 @@
|
||||
#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, 480>, 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 + map[y].size() / 2] = '#';
|
||||
} else {
|
||||
for (auto i = std::min(y, py); i <= std::max(y, py); ++i)
|
||||
map[i][500 - x + map[y].size() / 2] = '#';
|
||||
}
|
||||
|
||||
px = x;
|
||||
py = y;
|
||||
}
|
||||
}
|
||||
|
||||
int sands = 0;
|
||||
while (map[0][map[0].size() / 2] != '*') {
|
||||
++sands;
|
||||
int x = map[0].size() / 2, y = 0;
|
||||
while (1) {
|
||||
if (y > map.size() - 2) {
|
||||
map[y][x] = '*';
|
||||
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 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue