diff --git a/main.go b/main.go index 265db45..83bb8f8 100644 --- a/main.go +++ b/main.go @@ -4,7 +4,7 @@ import "fmt" var ( // 4x4 board with node counts - board = map[int]int{ + StartingBoard = map[int]int{ 10: 2, 11: 3, 12: 3, 13: 3, 20: 1, 21: 4, 22: 5, 23: 9, 30: 0, 31: 2, 32: 2, 33: 4, @@ -12,29 +12,60 @@ var ( } ) +func FindMove(s int, b map[int]int, p string) (ok bool, paths []string) { + // Found possible path + if s == 20 { + return true, append(paths, p) + } + // deincrement the starting point + b[s] -= 1 + + // what are M valid directions + NW := s - 11 + NE := s - 9 + SW := s + 9 + SE := s + 11 + + if b[NW] != 0 { // NW + ok, r := FindMove(NW, b, (p + "NW")) + if ok { + paths = append(paths, r...) + } + } + if b[NE] != 0 { // NE + ok, r := FindMove(NE, b, (p + "NE")) + if ok { + paths = append(paths, r...) + } + } + if b[SW] != 0 { // SW + ok, r := FindMove(SW, b, (p + "SW")) + if ok { + paths = append(paths, r...) + } + } + if b[SE] != 0 { // SE + ok, r := FindMove(SE, b, (p + "SE")) + if ok { + paths = append(paths, r...) + } + } + + return true, paths +} + func main() { - q := make(chan int, 4) + // queue := make(chan int, 4) - // board[p] - p := 22 // walk and find nodes + // := FindPath() - if board[p-11] != 0 { // NW - q <- (p - 11) - } - if board[p-9] != 0 { // NE - q <- (p - 9) - } - if board[p+9] != 0 { // SW - q <- (p + 9) - } - if board[p+11] != 0 { // SE - q <- (p + 11) - } - close(q) + board := StartingBoard + board[22] -= 1 + _, moves := FindMove(22, board, "") // Get valid nodes - for n := range q { + for _, n := range moves { fmt.Println(n) } }