package main
import (
"fmt"
)
func spiral(height, width, row, col int) []int {
a := createSlice(height, width)
result := []int{}
r := row - 1
c := col - 1
result = append(result, a[r][c])
x := 1
for z := 0; (height * width) != len(result); z++ {
for i := 0; i < x; i++ {
r, c = up(r, c)
if !outOfBoundary(height, width, r, c) {
result = append(result, a[r][c])
}
}
for i := 0; i < x; i++ {
r, c = left(r, c)
if !outOfBoundary(height, width, r, c) {
result = append(result, a[r][c])
}
}
x += 1
for i := 0; i < x; i++ {
r, c = down(r, c)
if !outOfBoundary(height, width, r, c) {
result = append(result, a[r][c])
}
}
for i := 0; i < x; i++ {
r, c = right(r, c)
if !outOfBoundary(height, width, r, c) {
result = append(result, a[r][c])
}
}
x += 1
}
return result
}
func outOfBoundary(height, width, row, col int) bool {
return !((row >= 0 && row < height) && (col >= 0 && col < width))
}
func left(row, col int) (int, int) {
return row, col - 1
}
func right(row, col int) (int, int) {
return row, col + 1
}
func up(row, col int) (int, int) {
return row - 1, col
}
func down(row, col int) (int, int) {
return row + 1, col
}
func createSlice(height, width int) [][]int {
a := make([][]int, height)
n := 1
for i := 0; i < height; i++ {
a[i] = make([]int, width)
for j := 0; j < width; j++ {
a[i][j] = n
n += 1
}
}
return a
}
func main() {
fmt.Println(spiral(5, 5, 3, 3))
fmt.Println(spiral(2, 4, 1, 2))
fmt.Println(spiral(5, 5, 4, 2))
}
Thursday, October 31, 2013
How to Solve Spiral Problem
My solution for spiral problem.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment