fork(2) download
  1. #include <iostream>
  2. #include <iomanip>
  3.  
  4. static size_t count_digits(size_t x)
  5. {
  6. size_t res = 0;
  7. while (x > 0) {
  8. ++res;
  9. x /= 10;
  10. }
  11. return res;
  12. }
  13.  
  14. int main() {
  15. const size_t coils = 7;
  16. const size_t size = coils * 2 + 1;
  17. const size_t digits = count_digits(size * size + 1);
  18.  
  19. for (size_t y = 0; y < size; ++y)
  20. {
  21. for (size_t x = 0; x < size; ++x)
  22. {
  23. const size_t dx = x > coils ? x - coils : coils - x;
  24. const size_t dy = y > coils ? y - coils : coils - y;
  25. const size_t coil = std::max(dx, dy);
  26.  
  27. const size_t side_size = coil * 2;
  28. const size_t coil_start = coil > 0 ? (coil * 2 - 1) * (coil * 2 - 1) + 1 : 1;
  29.  
  30. // quadrants: 0 - right, 1 - bottom, 2 - left, 3 - top
  31. size_t quadrant = 0, offset = 0;
  32. if (x > coils && y >= size - x && y <= x) { quadrant = 0; offset = y - (size - x); }
  33. if (y > coils && x >= size - y - 1 && x < y) { quadrant = 1; offset = y - x - 1; }
  34. if (x < coils && y >= x && y < size - x - 1) { quadrant = 2; offset = (size - x - 2) - y; }
  35. if (y < coils && x > y && x < size - y) { quadrant = 3; offset = x - y - 1; }
  36.  
  37. const size_t n = coil_start + side_size * quadrant + offset;
  38.  
  39. std::cout << std::setw(digits) << n << " ";
  40. }
  41. std::cout << std::endl;
  42. }
  43.  
  44. return 0;
  45. }
Success #stdin #stdout 0s 5648KB
stdin
Standard input is empty
stdout
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 
210 157 158 159 160 161 162 163 164 165 166 167 168 169 170 
209 156 111 112 113 114 115 116 117 118 119 120 121 122 171 
208 155 110  73  74  75  76  77  78  79  80  81  82 123 172 
207 154 109  72  43  44  45  46  47  48  49  50  83 124 173 
206 153 108  71  42  21  22  23  24  25  26  51  84 125 174 
205 152 107  70  41  20   7   8   9  10  27  52  85 126 175 
204 151 106  69  40  19   6   1   2  11  28  53  86 127 176 
203 150 105  68  39  18   5   4   3  12  29  54  87 128 177 
202 149 104  67  38  17  16  15  14  13  30  55  88 129 178 
201 148 103  66  37  36  35  34  33  32  31  56  89 130 179 
200 147 102  65  64  63  62  61  60  59  58  57  90 131 180 
199 146 101 100  99  98  97  96  95  94  93  92  91 132 181 
198 145 144 143 142 141 140 139 138 137 136 135 134 133 182 
197 196 195 194 193 192 191 190 189 188 187 186 185 184 183