fork download
  1. #include <iostream>
  2. #include <tuple>
  3. #include <vector>
  4. #include <random>
  5. #include <cstdint>
  6. #include <cmath>
  7. #include <algorithm>
  8.  
  9. typedef std::tuple<std::uintmax_t, std::uintmax_t > Point;
  10. typedef std::vector<Point> PType;
  11. typedef std::vector<std::vector<char>> MType;
  12.  
  13. PType MakeRandomPoint(const std::uintmax_t& W, const std::uintmax_t& H, const std::uint64_t& Lim,const unsigned int& S = 0) {
  14.  
  15. //std::uint64_t Lim = 5;
  16. std::uint64_t L = W + H;
  17. std::mt19937 mt(S);
  18. std::uniform_int_distribution<std::uintmax_t> XD(0, std::max<std::intmax_t>(0,(static_cast<std::intmax_t>(W)-1)));
  19. std::uniform_int_distribution<std::uintmax_t> YD(0, std::max<std::intmax_t>(0,(static_cast<std::intmax_t>(H)-1)));
  20.  
  21. PType R;
  22.  
  23. for (std::uintmax_t i = 0; i < L; i++) {
  24. std::uintmax_t X = XD(mt);
  25. std::uintmax_t Y = YD(mt);
  26.  
  27. double ML = Lim*Lim+1;
  28. for (auto o : R) {
  29. double H = ((std::get<0>(o) - X) * (std::get<0>(o) - X)) + ((std::get<1>(o) - Y) * (std::get<1>(o) - Y));
  30.  
  31. //double H = std::hypot<std::intmax_t,std::intmax_t>(static_cast<std::intmax_t>(std::get<0>(o)) - X, static_cast<std::intmax_t>(std::get<1>(o)) - Y);
  32. ML = std::min<double>(H, ML);
  33. }
  34. if ( ((std::intmax_t)ML >= Lim*Lim)) { R.push_back({ X,Y }); }
  35. }
  36.  
  37. return R;
  38. }
  39.  
  40. PType SetWall(const std::uintmax_t& W,const std::uintmax_t& H,const PType& P,const std::uintmax_t Lim = 5) {
  41.  
  42. PType R = P;
  43. bool F = true;
  44. for (std::uintmax_t Y = 0; Y < H; Y++) {
  45. for (std::uintmax_t X = 0; X < W; X++) {
  46. double ML = Lim*Lim+1;
  47. for (auto& o : P) {
  48. double H = ((std::get<0>(o) - X) * (std::get<0>(o) - X)) + ((std::get<1>(o) - Y) * (std::get<1>(o) - Y));
  49. //double H = std::hypot(std::get<0>(o) - X, std::get<1>(o) - Y);
  50. ML = std::min<double>(H, ML);
  51. }
  52.  
  53. if ((ML <= (Lim*Lim)) && (ML >= 1)) {
  54. if (ML >= (Lim*Lim) * 0.6) {
  55. R.push_back({ X,Y });
  56. F = false;
  57. }
  58. }
  59. }
  60. }
  61. return (!F) ? SetWall(W, H, R, Lim) : R;
  62. }
  63.  
  64. MType MakeMap(const PType& P, std::uintmax_t W, std::uintmax_t H) {
  65. MType R(H);
  66. std::uintmax_t i = 0;
  67. for (auto& o : R) {
  68. o.resize(W,' ');
  69. }
  70.  
  71. for (auto& o : P) {
  72. R[std::get<1>(o)][std::get<0>(o)] = '#';
  73. }
  74.  
  75. return R;
  76. }
  77.  
  78. bool Show(const PType& P,std::uintmax_t W,std::uintmax_t H) {
  79. MType M = MakeMap(P, W, H);
  80. std::uintmax_t i = 0;
  81. for (auto oo : M) {
  82. std::cout <<i++<<'\t' << '*';
  83. for (auto o : oo) {
  84. std::cout << o;
  85. }
  86. std::cout << '*';
  87. std::cout << std::endl;
  88. }
  89.  
  90. return true;
  91. }
  92.  
  93. PType MakeAnother(std::size_t W, std::size_t H, bool F = true) {
  94. MType M = MakeMap({}, W, H);
  95. PType P;
  96. int V = F ? 0 : 1;
  97. for (std::size_t i = 0; i < H; i++) {
  98. for (std::size_t j = ((i+V)%2);j < W; j+=2) {
  99. P.push_back({j,i});
  100. }
  101. }
  102. return P;
  103. }
  104.  
  105. int main() {
  106.  
  107.  
  108. PType P;
  109. std::uintmax_t W = 15;
  110. std::uintmax_t H = 15;
  111. std::uintmax_t Lim = 5;
  112. /** /
  113. P = MakeRandomPoint(W, H, Lim);
  114.  
  115. Show(P, W, H);
  116.  
  117. //
  118. std::cout << std::endl;
  119.  
  120. P=SetWall(W, H, P, Lim);
  121.  
  122. Show(P, W, H);
  123.  
  124. //**/
  125.  
  126. std::random_device rd;
  127. std::uniform_int_distribution<> ui(0, 1);
  128.  
  129. for (std::size_t i = 0; i < 16; i++) {
  130. P = MakeAnother(W, H, ui(rd) ? true:false);
  131. Show(P, W, H);
  132. std::cout << std::endl;
  133. }
  134.  
  135. return 0;
  136. }
Success #stdin #stdout 0s 4468KB
stdin
Standard input is empty
stdout
0	*# # # # # # # #*
1	* # # # # # # # *
2	*# # # # # # # #*
3	* # # # # # # # *
4	*# # # # # # # #*
5	* # # # # # # # *
6	*# # # # # # # #*
7	* # # # # # # # *
8	*# # # # # # # #*
9	* # # # # # # # *
10	*# # # # # # # #*
11	* # # # # # # # *
12	*# # # # # # # #*
13	* # # # # # # # *
14	*# # # # # # # #*

0	*# # # # # # # #*
1	* # # # # # # # *
2	*# # # # # # # #*
3	* # # # # # # # *
4	*# # # # # # # #*
5	* # # # # # # # *
6	*# # # # # # # #*
7	* # # # # # # # *
8	*# # # # # # # #*
9	* # # # # # # # *
10	*# # # # # # # #*
11	* # # # # # # # *
12	*# # # # # # # #*
13	* # # # # # # # *
14	*# # # # # # # #*

0	* # # # # # # # *
1	*# # # # # # # #*
2	* # # # # # # # *
3	*# # # # # # # #*
4	* # # # # # # # *
5	*# # # # # # # #*
6	* # # # # # # # *
7	*# # # # # # # #*
8	* # # # # # # # *
9	*# # # # # # # #*
10	* # # # # # # # *
11	*# # # # # # # #*
12	* # # # # # # # *
13	*# # # # # # # #*
14	* # # # # # # # *

0	*# # # # # # # #*
1	* # # # # # # # *
2	*# # # # # # # #*
3	* # # # # # # # *
4	*# # # # # # # #*
5	* # # # # # # # *
6	*# # # # # # # #*
7	* # # # # # # # *
8	*# # # # # # # #*
9	* # # # # # # # *
10	*# # # # # # # #*
11	* # # # # # # # *
12	*# # # # # # # #*
13	* # # # # # # # *
14	*# # # # # # # #*

0	*# # # # # # # #*
1	* # # # # # # # *
2	*# # # # # # # #*
3	* # # # # # # # *
4	*# # # # # # # #*
5	* # # # # # # # *
6	*# # # # # # # #*
7	* # # # # # # # *
8	*# # # # # # # #*
9	* # # # # # # # *
10	*# # # # # # # #*
11	* # # # # # # # *
12	*# # # # # # # #*
13	* # # # # # # # *
14	*# # # # # # # #*

0	* # # # # # # # *
1	*# # # # # # # #*
2	* # # # # # # # *
3	*# # # # # # # #*
4	* # # # # # # # *
5	*# # # # # # # #*
6	* # # # # # # # *
7	*# # # # # # # #*
8	* # # # # # # # *
9	*# # # # # # # #*
10	* # # # # # # # *
11	*# # # # # # # #*
12	* # # # # # # # *
13	*# # # # # # # #*
14	* # # # # # # # *

0	*# # # # # # # #*
1	* # # # # # # # *
2	*# # # # # # # #*
3	* # # # # # # # *
4	*# # # # # # # #*
5	* # # # # # # # *
6	*# # # # # # # #*
7	* # # # # # # # *
8	*# # # # # # # #*
9	* # # # # # # # *
10	*# # # # # # # #*
11	* # # # # # # # *
12	*# # # # # # # #*
13	* # # # # # # # *
14	*# # # # # # # #*

0	* # # # # # # # *
1	*# # # # # # # #*
2	* # # # # # # # *
3	*# # # # # # # #*
4	* # # # # # # # *
5	*# # # # # # # #*
6	* # # # # # # # *
7	*# # # # # # # #*
8	* # # # # # # # *
9	*# # # # # # # #*
10	* # # # # # # # *
11	*# # # # # # # #*
12	* # # # # # # # *
13	*# # # # # # # #*
14	* # # # # # # # *

0	* # # # # # # # *
1	*# # # # # # # #*
2	* # # # # # # # *
3	*# # # # # # # #*
4	* # # # # # # # *
5	*# # # # # # # #*
6	* # # # # # # # *
7	*# # # # # # # #*
8	* # # # # # # # *
9	*# # # # # # # #*
10	* # # # # # # # *
11	*# # # # # # # #*
12	* # # # # # # # *
13	*# # # # # # # #*
14	* # # # # # # # *

0	*# # # # # # # #*
1	* # # # # # # # *
2	*# # # # # # # #*
3	* # # # # # # # *
4	*# # # # # # # #*
5	* # # # # # # # *
6	*# # # # # # # #*
7	* # # # # # # # *
8	*# # # # # # # #*
9	* # # # # # # # *
10	*# # # # # # # #*
11	* # # # # # # # *
12	*# # # # # # # #*
13	* # # # # # # # *
14	*# # # # # # # #*

0	* # # # # # # # *
1	*# # # # # # # #*
2	* # # # # # # # *
3	*# # # # # # # #*
4	* # # # # # # # *
5	*# # # # # # # #*
6	* # # # # # # # *
7	*# # # # # # # #*
8	* # # # # # # # *
9	*# # # # # # # #*
10	* # # # # # # # *
11	*# # # # # # # #*
12	* # # # # # # # *
13	*# # # # # # # #*
14	* # # # # # # # *

0	*# # # # # # # #*
1	* # # # # # # # *
2	*# # # # # # # #*
3	* # # # # # # # *
4	*# # # # # # # #*
5	* # # # # # # # *
6	*# # # # # # # #*
7	* # # # # # # # *
8	*# # # # # # # #*
9	* # # # # # # # *
10	*# # # # # # # #*
11	* # # # # # # # *
12	*# # # # # # # #*
13	* # # # # # # # *
14	*# # # # # # # #*

0	*# # # # # # # #*
1	* # # # # # # # *
2	*# # # # # # # #*
3	* # # # # # # # *
4	*# # # # # # # #*
5	* # # # # # # # *
6	*# # # # # # # #*
7	* # # # # # # # *
8	*# # # # # # # #*
9	* # # # # # # # *
10	*# # # # # # # #*
11	* # # # # # # # *
12	*# # # # # # # #*
13	* # # # # # # # *
14	*# # # # # # # #*

0	*# # # # # # # #*
1	* # # # # # # # *
2	*# # # # # # # #*
3	* # # # # # # # *
4	*# # # # # # # #*
5	* # # # # # # # *
6	*# # # # # # # #*
7	* # # # # # # # *
8	*# # # # # # # #*
9	* # # # # # # # *
10	*# # # # # # # #*
11	* # # # # # # # *
12	*# # # # # # # #*
13	* # # # # # # # *
14	*# # # # # # # #*

0	*# # # # # # # #*
1	* # # # # # # # *
2	*# # # # # # # #*
3	* # # # # # # # *
4	*# # # # # # # #*
5	* # # # # # # # *
6	*# # # # # # # #*
7	* # # # # # # # *
8	*# # # # # # # #*
9	* # # # # # # # *
10	*# # # # # # # #*
11	* # # # # # # # *
12	*# # # # # # # #*
13	* # # # # # # # *
14	*# # # # # # # #*

0	* # # # # # # # *
1	*# # # # # # # #*
2	* # # # # # # # *
3	*# # # # # # # #*
4	* # # # # # # # *
5	*# # # # # # # #*
6	* # # # # # # # *
7	*# # # # # # # #*
8	* # # # # # # # *
9	*# # # # # # # #*
10	* # # # # # # # *
11	*# # # # # # # #*
12	* # # # # # # # *
13	*# # # # # # # #*
14	* # # # # # # # *