package main import ( "fmt" "math" ) func main() { Spiralizer(1) Spiralizer(2) Spiralizer(3) Spiralizer(4) Spiralizer(5) Spiralizer(6) Spiralizer(7) Spiralizer(8) Spiralizer(9) Spiralizer(10) Spiralizer(11) Spiralizer(12) } func Spiralizer(n int) { if n == 1 { fmt.Printf("1\n\n") return } // Create grid grid := make([][]int, n) for i := range grid { grid[i] = make([]int, n) } // Middle of the spiral middle := int(math.Ceil(float64(n-1) / 2)) for i := range grid { for j := range grid { // For the first row, just increment each element if i == 0 { grid[i][j] = j + 1 } // Populate a diagonal if j == i-1 && i <= middle { grid[i][j] = (n - i) * (4 * i) } // Populate the left column if i > 1 && j == 0 { grid[i][j] = grid[i-1][j] - 1 } // Populate the bottom row if i == n-1 && j > 0 { grid[i][j] = grid[i][j-1] - 1 } // Populate the right column if i > 0 && j == n-1 { grid[i][j] = grid[i-1][j] + 1 } // Populate the rest of the easy rows if j >= i && j < n-i && j > 0 { grid[i][j] = grid[i][j-1] + 1 } // Populate columns in the top right quadrant if grid[i][j] == 0 && i <= n-(n-j) && j > middle { grid[i][j] = grid[i-1][j] + 1 } // Populate empty columns in the top left quadrant if grid[i][j] == 0 && j < middle && i < n-j { grid[i][j] = grid[i-1][j] - 1 } // Populate remaining rows if grid[i][j] == 0 { grid[i][j] = grid[i][j-1] - 1 } } } PrettyPrint(grid) } func PrettyPrint(a [][]int) { size := len(a) maxspaces := int(math.Log10(float64(size * size))) for i := range a { for j := range a { for k := 0; k < maxspaces-int(math.Log10(float64(a[i][j]))); k++ { fmt.Printf(" ") } fmt.Printf("%d ", a[i][j]) } fmt.Printf("\n") } fmt.Printf("\n") }
Standard input is empty
1 1 2 4 3 1 2 3 8 9 4 7 6 5 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 1 2 3 4 5 6 20 21 22 23 24 7 19 32 33 34 25 8 18 31 36 35 26 9 17 30 29 28 27 10 16 15 14 13 12 11 1 2 3 4 5 6 7 24 25 26 27 28 29 8 23 40 41 42 43 30 9 22 39 48 49 44 31 10 21 38 47 46 45 32 11 20 37 36 35 34 33 12 19 18 17 16 15 14 13 1 2 3 4 5 6 7 8 28 29 30 31 32 33 34 9 27 48 49 50 51 52 35 10 26 47 60 61 62 53 36 11 25 46 59 64 63 54 37 12 24 45 58 57 56 55 38 13 23 44 43 42 41 40 39 14 22 21 20 19 18 17 16 15 1 2 3 4 5 6 7 8 9 32 33 34 35 36 37 38 39 10 31 56 57 58 59 60 61 40 11 30 55 72 73 74 75 62 41 12 29 54 71 80 81 76 63 42 13 28 53 70 79 78 77 64 43 14 27 52 69 68 67 66 65 44 15 26 51 50 49 48 47 46 45 16 25 24 23 22 21 20 19 18 17 1 2 3 4 5 6 7 8 9 10 36 37 38 39 40 41 42 43 44 11 35 64 65 66 67 68 69 70 45 12 34 63 84 85 86 87 88 71 46 13 33 62 83 96 97 98 89 72 47 14 32 61 82 95 100 99 90 73 48 15 31 60 81 94 93 92 91 74 49 16 30 59 80 79 78 77 76 75 50 17 29 58 57 56 55 54 53 52 51 18 28 27 26 25 24 23 22 21 20 19 1 2 3 4 5 6 7 8 9 10 11 40 41 42 43 44 45 46 47 48 49 12 39 72 73 74 75 76 77 78 79 50 13 38 71 96 97 98 99 100 101 80 51 14 37 70 95 112 113 114 115 102 81 52 15 36 69 94 111 120 121 116 103 82 53 16 35 68 93 110 119 118 117 104 83 54 17 34 67 92 109 108 107 106 105 84 55 18 33 66 91 90 89 88 87 86 85 56 19 32 65 64 63 62 61 60 59 58 57 20 31 30 29 28 27 26 25 24 23 22 21 1 2 3 4 5 6 7 8 9 10 11 12 44 45 46 47 48 49 50 51 52 53 54 13 43 80 81 82 83 84 85 86 87 88 55 14 42 79 108 109 110 111 112 113 114 89 56 15 41 78 107 128 129 130 131 132 115 90 57 16 40 77 106 127 140 141 142 133 116 91 58 17 39 76 105 126 139 144 143 134 117 92 59 18 38 75 104 125 138 137 136 135 118 93 60 19 37 74 103 124 123 122 121 120 119 94 61 20 36 73 102 101 100 99 98 97 96 95 62 21 35 72 71 70 69 68 67 66 65 64 63 22 34 33 32 31 30 29 28 27 26 25 24 23