#include <iostream>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
template<typename T>
struct range {
using value_type = T;
//TODO: assert min <= max
value_type min, max;
};
struct point {
using value_type = int;
value_type x, y;
static point random(range<value_type> x_r, range<value_type> y_r) {
//TODO: use <random> instead of filthy rand
return {
(rand()%x_r.max)+x_r.min,
(rand()%y_r.max)+y_r.min
};
}
friend ostream &operator<<(ostream &os, point const &p) {
return os << "{x: " << p.x << ", y: " << p.y << "}";
}
};
int main() {
range<point::value_type>
x_range { 0, 100 },
y_range { 0, 100 };
vector<point> points;
generate_n(back_inserter(points), 10, [&] {
return point::random(x_range, y_range);
});
for_each(begin(points), end(points), [](auto &&p) {
cout << p << endl;
});
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IHJhbmdlIHsKCXVzaW5nIHZhbHVlX3R5cGUgPSBUOwoJLy9UT0RPOiBhc3NlcnQgbWluIDw9IG1heAoJdmFsdWVfdHlwZSBtaW4sIG1heDsKfTsKCnN0cnVjdCBwb2ludCB7Cgl1c2luZyB2YWx1ZV90eXBlID0gaW50OwoJdmFsdWVfdHlwZSB4LCB5OwoJCglzdGF0aWMgcG9pbnQgcmFuZG9tKHJhbmdlPHZhbHVlX3R5cGU+IHhfciwgcmFuZ2U8dmFsdWVfdHlwZT4geV9yKSB7CgkJLy9UT0RPOiB1c2UgPHJhbmRvbT4gaW5zdGVhZCBvZiBmaWx0aHkgcmFuZAoJCXJldHVybiB7CgkJCShyYW5kKCkleF9yLm1heCkreF9yLm1pbiwKCQkJKHJhbmQoKSV5X3IubWF4KSt5X3IubWluCgkJfTsKCX0KCQoJZnJpZW5kIG9zdHJlYW0gJm9wZXJhdG9yPDwob3N0cmVhbSAmb3MsIHBvaW50IGNvbnN0ICZwKSB7CgkJcmV0dXJuIG9zIDw8ICJ7eDogIiA8PCBwLnggPDwgIiwgeTogIiA8PCBwLnkgPDwgIn0iOwoJfQp9OwppbnQgbWFpbigpIHsKCXJhbmdlPHBvaW50Ojp2YWx1ZV90eXBlPgoJCXhfcmFuZ2UgeyAwLCAxMDAgfSwKCQl5X3JhbmdlIHsgMCwgMTAwIH07CgkgICAgICAKCXZlY3Rvcjxwb2ludD4gcG9pbnRzOwoJZ2VuZXJhdGVfbihiYWNrX2luc2VydGVyKHBvaW50cyksIDEwLCBbJl0gewoJCXJldHVybiBwb2ludDo6cmFuZG9tKHhfcmFuZ2UsIHlfcmFuZ2UpOwoJfSk7CgkKCWZvcl9lYWNoKGJlZ2luKHBvaW50cyksIGVuZChwb2ludHMpLCBbXShhdXRvICYmcCkgewoJCWNvdXQgPDwgcCA8PCBlbmRsOwoJfSk7CglyZXR1cm4gMDsKfQ==
{x: 83, y: 86}
{x: 77, y: 15}
{x: 93, y: 35}
{x: 86, y: 92}
{x: 49, y: 21}
{x: 62, y: 27}
{x: 90, y: 59}
{x: 63, y: 26}
{x: 40, y: 26}
{x: 72, y: 36}