#include <iostream>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cstring>
const unsigned int pass_number = 10;
const int max_x = 20;
const int max_y = 20;
template<int>
bool in_figure(int x, int y);
template<>
bool in_figure<1>(int x, int y)
{
return y < max_y && x < max_x && (x + y - max_y + 1) >= 0;
}
template<>
bool in_figure<2>(int x, int y)
{
return y < max_y && x < max_x && (x + y - max_y + 1) >= 0 && (y - x) >= 0;
}
int main()
{
char buffer[max_y][max_x];
srand(time(0));
memset(buffer, ' ', max_y * max_x);
for (unsigned pass = 0; pass < pass_number; ++pass)
for (int y = 0; y < max_y; ++y)
for (int x = 0; x < max_x; ++x)
if (buffer[y][x] != 'x')
if ((rand() % (pass_number / 3) == 0) && in_figure<1>(x, y))
buffer[y][x] = (buffer[y][x] == ' ')?'.':(buffer[y][x] == '.')?'v':'x';
for (int y = 0; y < max_y; ++y)
{
for (int x = 0; x < max_x; ++x)
std::cout << buffer[y][x];
std::cout << std::endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Y3RpbWU+CiNpbmNsdWRlIDxjc3RyaW5nPgoKY29uc3QgdW5zaWduZWQgaW50IHBhc3NfbnVtYmVyID0gMTA7CmNvbnN0IGludCBtYXhfeCA9IDIwOwpjb25zdCBpbnQgbWF4X3kgPSAyMDsKCnRlbXBsYXRlPGludD4KYm9vbCBpbl9maWd1cmUoaW50IHgsIGludCB5KTsKCnRlbXBsYXRlPD4KYm9vbCBpbl9maWd1cmU8MT4oaW50IHgsIGludCB5KQp7CiAgICByZXR1cm4geSA8IG1heF95ICYmIHggPCBtYXhfeCAmJiAoeCArIHkgLSBtYXhfeSArIDEpID49IDA7Cn0KCnRlbXBsYXRlPD4KYm9vbCBpbl9maWd1cmU8Mj4oaW50IHgsIGludCB5KQp7CiAgICByZXR1cm4geSA8IG1heF95ICYmIHggPCBtYXhfeCAmJiAoeCArIHkgLSBtYXhfeSArIDEpID49IDAgJiYgKHkgLSB4KSA+PSAwOwp9CgppbnQgbWFpbigpCnsKICAgIGNoYXIgYnVmZmVyW21heF95XVttYXhfeF07CgogICAgc3JhbmQodGltZSgwKSk7CiAgICBtZW1zZXQoYnVmZmVyLCAnICcsIG1heF95ICogbWF4X3gpOwoKICAgIGZvciAodW5zaWduZWQgcGFzcyA9IDA7IHBhc3MgPCBwYXNzX251bWJlcjsgKytwYXNzKQogICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbWF4X3k7ICsreSkKICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtYXhfeDsgKyt4KQogICAgICAgICAgICAgICAgaWYgKGJ1ZmZlclt5XVt4XSAhPSAneCcpCiAgICAgICAgICAgICAgICAgICAgaWYgKChyYW5kKCkgJSAocGFzc19udW1iZXIgLyAzKSA9PSAwKSAmJiBpbl9maWd1cmU8MT4oeCwgeSkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclt5XVt4XSA9IChidWZmZXJbeV1beF0gPT0gJyAnKT8nLic6KGJ1ZmZlclt5XVt4XSA9PSAnLicpPyd2JzoneCc7CgogICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtYXhfeTsgKyt5KQogICAgewogICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbWF4X3g7ICsreCkKICAgICAgICAgICAgc3RkOjpjb3V0IDw8IGJ1ZmZlclt5XVt4XTsKICAgICAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogICAgfQp9Cg==