]> git.scottworley.com Git - slidingtile/blobdiff - sliding_tile.go
Adjacent spaces
[slidingtile] / sliding_tile.go
index 32bccae239b9b0c9a1f8b989c5396c4bc527fe93..96e00dcc85645a6d997a878028adf06bf42e4af6 100644 (file)
@@ -5,11 +5,19 @@ import "os"
 import "strconv"
 
 const HOLE = 0
-const BOARD_SIZE = 16
+const BOARD_DIM = 4
+const BOARD_SIZE = BOARD_DIM * BOARD_DIM
 
 type Space int8
 type Board [BOARD_SIZE]Space
 
+const (
+       LEFT  = -1
+       RIGHT = +1
+       UP    = -BOARD_DIM
+       DOWN  = +BOARD_DIM
+)
+
 func read_board_from_strings(in []string) (*Board, error) {
        if len(in) != BOARD_SIZE {
                return nil, fmt.Errorf("Please provide %d values", BOARD_SIZE)
@@ -25,6 +33,26 @@ func read_board_from_strings(in []string) (*Board, error) {
        return &b, nil
 }
 
+func adjacent_spaces(s Space) []Space {
+       if s < 0 || s >= BOARD_SIZE {
+               panic("Invalid space")
+       }
+       var adjacent []Space
+       if s >= BOARD_DIM {
+               adjacent = append(adjacent, s+UP)
+       }
+       if s < BOARD_SIZE-BOARD_DIM {
+               adjacent = append(adjacent, s+DOWN)
+       }
+       if s%BOARD_DIM != 0 {
+               adjacent = append(adjacent, s+LEFT)
+       }
+       if s%BOARD_DIM != BOARD_DIM-1 {
+               adjacent = append(adjacent, s+RIGHT)
+       }
+       return adjacent
+}
+
 func main() {
        start, err := read_board_from_strings(os.Args[1:])
        if err != nil {