X-Git-Url: http://git.scottworley.com/slidingtile/blobdiff_plain/212a5629d44cb0aa108057fe5a6d0c67bb479d54..2c35054f652f2d4bbf09867a871096f48e5c7af8:/sliding_tile.go diff --git a/sliding_tile.go b/sliding_tile.go index 32bccae..96e00dc 100644 --- a/sliding_tile.go +++ b/sliding_tile.go @@ -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 {