- #include <iostream> 
- #include <cmath> 
- using namespace std; 
-   
- // range : [min, max] 
- int random(int min, int max) { 
-    static bool first = true; 
-    if (first) {   
-       srand(time(NULL)); //seeding for the first time only! 
-       first = false; 
-    } 
-    return min + rand() % (max - min + 1); 
- } 
-   
- std::pair<int,int> rand_heading_point(int start_x, int start_y, int max_x, int max_y, int heading_dir) { 
-     int turn_x = 0; 
-     int turn_y = 0; 
-   
-     // if heading_dir == 0 --> object moves horicontally towards max_x, increment x 
-     // if heading_dir == 90 --> object moves vertically towards max_y, increment y 
-     if (heading_dir <= 90) { 
-       turn_x = random(start_x, max_x); 
-       turn_y = random(start_y, max_y); 
-     } else if (heading_dir <= 180) { 
-       turn_x = random(0, start_x); 
-       turn_y = random(start_y, max_y); 
-     } else if (heading_dir <= 270) { 
-       turn_x = random(0, max_y); 
-       turn_y = random(0, start_y); 
-     } else { 
-       turn_x = random(start_x, max_x); 
-       turn_y = random(0, start_y); 
-     } 
-   
-     return std::make_pair(turn_x, turn_y); 
- } 
-   
- void change_heading_dir(int curr_x, int curr_y, int turn_x, int turn_y, int &heading_dir) { 
- 	if (curr_x == turn_x || curr_y == turn_y) { 
- 		heading_dir *= 2; 
- 	} 
- } 
-   
- // edit: use floats 
- void move(int &curr_x, int &curr_y, int heading_dir) { 
- 	int heading_rad = heading_dir * (M_PI / 180); 
-    	int inc_len = 1; 
-     int x_inc = Math.cos(heading_rad) * inc_len; 
-     int y_inc = Math.sin(heading_rad) * inc_len; 
-   
-   	curr_x += x_inc; 
-   	curr_y += y_inc; 
- } 
-   
- int main() { 
- 	// your code goes here 
-   
- 	int start_x = 100; 
- 	int start_y = 100; 
- 	int width = 500; 
- 	int height = 500; 
- 	int dir = 0; 
-   
- 	auto heading_point = rand_heading_point(start_x, start_y, width, height, dir); 
-   
- 	cout << "x: " << heading_point.first << ", y: " << heading_point.second << endl; 
-   
- 	return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyByYW5nZSA6IFttaW4sIG1heF0KaW50IHJhbmRvbShpbnQgbWluLCBpbnQgbWF4KSB7CiAgIHN0YXRpYyBib29sIGZpcnN0ID0gdHJ1ZTsKICAgaWYgKGZpcnN0KSB7ICAKICAgICAgc3JhbmQodGltZShOVUxMKSk7IC8vc2VlZGluZyBmb3IgdGhlIGZpcnN0IHRpbWUgb25seSEKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgfQogICByZXR1cm4gbWluICsgcmFuZCgpICUgKG1heCAtIG1pbiArIDEpOwp9CgpzdGQ6OnBhaXI8aW50LGludD4gcmFuZF9oZWFkaW5nX3BvaW50KGludCBzdGFydF94LCBpbnQgc3RhcnRfeSwgaW50IG1heF94LCBpbnQgbWF4X3ksIGludCBoZWFkaW5nX2RpcikgewogICAgaW50IHR1cm5feCA9IDA7CiAgICBpbnQgdHVybl95ID0gMDsKICAgIAogICAgLy8gaWYgaGVhZGluZ19kaXIgPT0gMCAtLT4gb2JqZWN0IG1vdmVzIGhvcmljb250YWxseSB0b3dhcmRzIG1heF94LCBpbmNyZW1lbnQgeAogICAgLy8gaWYgaGVhZGluZ19kaXIgPT0gOTAgLS0+IG9iamVjdCBtb3ZlcyB2ZXJ0aWNhbGx5IHRvd2FyZHMgbWF4X3ksIGluY3JlbWVudCB5CiAgICBpZiAoaGVhZGluZ19kaXIgPD0gOTApIHsKICAgICAgdHVybl94ID0gcmFuZG9tKHN0YXJ0X3gsIG1heF94KTsKICAgICAgdHVybl95ID0gcmFuZG9tKHN0YXJ0X3ksIG1heF95KTsKICAgIH0gZWxzZSBpZiAoaGVhZGluZ19kaXIgPD0gMTgwKSB7CiAgICAgIHR1cm5feCA9IHJhbmRvbSgwLCBzdGFydF94KTsKICAgICAgdHVybl95ID0gcmFuZG9tKHN0YXJ0X3ksIG1heF95KTsKICAgIH0gZWxzZSBpZiAoaGVhZGluZ19kaXIgPD0gMjcwKSB7CiAgICAgIHR1cm5feCA9IHJhbmRvbSgwLCBtYXhfeSk7CiAgICAgIHR1cm5feSA9IHJhbmRvbSgwLCBzdGFydF95KTsKICAgIH0gZWxzZSB7CiAgICAgIHR1cm5feCA9IHJhbmRvbShzdGFydF94LCBtYXhfeCk7CiAgICAgIHR1cm5feSA9IHJhbmRvbSgwLCBzdGFydF95KTsKICAgIH0KICAgIAogICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHR1cm5feCwgdHVybl95KTsKfQoKdm9pZCBjaGFuZ2VfaGVhZGluZ19kaXIoaW50IGN1cnJfeCwgaW50IGN1cnJfeSwgaW50IHR1cm5feCwgaW50IHR1cm5feSwgaW50ICZoZWFkaW5nX2RpcikgewoJaWYgKGN1cnJfeCA9PSB0dXJuX3ggfHwgY3Vycl95ID09IHR1cm5feSkgewoJCWhlYWRpbmdfZGlyICo9IDI7Cgl9Cn0KCi8vIGVkaXQ6IHVzZSBmbG9hdHMKdm9pZCBtb3ZlKGludCAmY3Vycl94LCBpbnQgJmN1cnJfeSwgaW50IGhlYWRpbmdfZGlyKSB7CglpbnQgaGVhZGluZ19yYWQgPSBoZWFkaW5nX2RpciAqIChNX1BJIC8gMTgwKTsKICAgCWludCBpbmNfbGVuID0gMTsKICAgIGludCB4X2luYyA9IE1hdGguY29zKGhlYWRpbmdfcmFkKSAqIGluY19sZW47CiAgICBpbnQgeV9pbmMgPSBNYXRoLnNpbihoZWFkaW5nX3JhZCkgKiBpbmNfbGVuOwogIAkKICAJY3Vycl94ICs9IHhfaW5jOwogIAljdXJyX3kgKz0geV9pbmM7Cn0KCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJCglpbnQgc3RhcnRfeCA9IDEwMDsKCWludCBzdGFydF95ID0gMTAwOwoJaW50IHdpZHRoID0gNTAwOwoJaW50IGhlaWdodCA9IDUwMDsKCWludCBkaXIgPSAwOwoJCglhdXRvIGhlYWRpbmdfcG9pbnQgPSByYW5kX2hlYWRpbmdfcG9pbnQoc3RhcnRfeCwgc3RhcnRfeSwgd2lkdGgsIGhlaWdodCwgZGlyKTsKCQoJY291dCA8PCAieDogIiA8PCBoZWFkaW5nX3BvaW50LmZpcnN0IDw8ICIsIHk6ICIgPDwgaGVhZGluZ19wb2ludC5zZWNvbmQgPDwgZW5kbDsKCQoJcmV0dXJuIDA7Cn0=