Advertisement
DanikKUL

Spirals!

Feb 28th, 2022
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.05 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void left(int size, int spiral[size][size], int x, int y);
  5. void right(int size, int spiral[size][size], int x, int y);
  6. void up(int size, int spiral[size][size], int x, int y);
  7. void down(int size, int spiral[size][size], int x, int y);
  8.  
  9. //1 - right
  10. //2 - down
  11. //3 - left
  12. //4 - up
  13.  
  14. void output(int size, int spiral[size][size]){
  15.     for (int i = 0; i < size; ++i) {
  16.         for (int j = 0; j < size; ++j) {
  17.             printf("%4d", spiral[i][j]);
  18.         }
  19.         printf("\n");
  20.     }
  21. }
  22.  
  23. void right(int size, int spiral[size][size], int x, int y){
  24.     printf("right start: x %d y %d\n", x, y);
  25.     int turns = 0;
  26.     while(1){
  27.         if(y == size - 1){
  28.             spiral[x][y] = 1;
  29.             break;
  30.         } else if (spiral[x][y + 1] == 1){
  31.             y--;
  32.             break;
  33.         }
  34.         spiral[x][y] = 1;
  35.         y++;
  36.         turns++;
  37.     }
  38.     printf("right end: x %d y %d turns %d\n", x, y, turns);
  39.     output(size, spiral);
  40.     if(turns > 2){
  41.         down(size, spiral, x, y);
  42.     } else {
  43.         return;
  44.     }
  45. }
  46.  
  47. void left(int size, int spiral[size][size], int x, int y){
  48.     printf("left start: x %d y %d\n", x, y);
  49.     int turns = 0;
  50.     while(1){
  51.         if(y == 0){
  52.             spiral[x][y] = 1;
  53.             break;
  54.         } else if(spiral[x][y - 1] == 1){
  55.             y++;
  56.             break;
  57.         }
  58.         spiral[x][y] = 1;
  59.         y--;
  60.         turns++;
  61.     }
  62.     printf("left end: x %d y %d turns %d\n", x, y, turns);
  63.     output(size, spiral);
  64.     if(turns > 2){
  65.         up(size, spiral, x, y);
  66.     } else {
  67.         return;
  68.     }
  69. }
  70.  
  71. void up(int size, int spiral[size][size], int x, int y){
  72.     printf("up start: x %d y %d\n", x, y);
  73.     int turns = 0;
  74.     while(1){
  75.         if(x == -1){
  76.             break;
  77.         } else if(spiral[x - 1][y] == 1){
  78.             break;
  79.         }
  80.         spiral[x][y] = 1;
  81.         x--;
  82.         turns++;
  83.     }
  84.     x++;
  85.     printf("up end: x %d y %d turns %d\n", x, y, turns);
  86.     output(size, spiral);
  87.     if(turns > 2){
  88.         right(size, spiral, x, y);
  89.     } else {
  90.         return;
  91.     }
  92. }
  93.  
  94. void down(int size, int spiral[size][size], int x, int y){
  95.     printf("down start: x %d y %d\n", x, y);
  96.     int turns = 0;
  97.     while(1){
  98.         if(x == size - 1){
  99.             spiral[x][y] = 1;
  100.             break;
  101.         } else if(spiral[x + 1][y] == 1){
  102.             if(turns <= 2){
  103.                 return;
  104.             }
  105.             x--;
  106.             break;
  107.         }
  108.         spiral[x][y] = 1;
  109.         x++;
  110.         turns++;
  111.     }
  112.     printf("down end: x %d y %d turns %d\n", x, y, turns);
  113.     output(size, spiral);
  114.     if(turns > 2){
  115.         left(size, spiral, x, y);
  116.     } else {
  117.         return;
  118.     }
  119. }
  120.  
  121. void spiralize (unsigned n, int spiral[n][n]){
  122.     for (int i = 0; i < n; ++i) {
  123.         for (int j = 0; j < n; ++j) {
  124.             spiral[i][j] = 0;
  125.         }
  126.     }
  127.     right(n, spiral, 0, 0);
  128. }
  129.  
  130. int main(){
  131.     int array[18][18];
  132.     spiralize(18, array);
  133.     printf("\n");
  134.     output(18, array);
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement