// TestGetProduct tests GetProduct func TestGetProduct(t *testing.T) { var tt = []goutils.TTAI{ {[]int{1, 2, 3}, 6}, {[]int{4, 5, 6}, 120}, } for i := 0; i < len(tt); i++ { testIn := goutils.GetProduct(tt[i].Test) testExp := tt[i].Expt if testExp != testIn { t.Error("GetProduct test failed") } else { t.Log("Passed") } } }
// Euler11 exports the the solution to Project Euler no.11 func Euler11() { type MaxProd struct { Init int Vals []int } var dirs = make(map[string]*MaxProd) // maxoftypes returns the maximum combination of // product and product components dirs["diag"] = &MaxProd{1, []int{}} dirs["right"] = &MaxProd{1, []int{}} dirs["left"] = &MaxProd{1, []int{}} dirs["up"] = &MaxProd{1, []int{}} dirs["down"] = &MaxProd{1, []int{}} matrix := Euler11Matrix // traverse the matrix diagonally for y := 0; y < len(matrix)-3; y++ { for x := 0; x < len(matrix)-3; x++ { numset := []int{} for n := 0; n < 4; n++ { num := matrix[y+n][x+n] numset = append(numset, num) } setprod := goutils.GetProduct(numset) if setprod > dirs["diag"].Init { dirs["diag"].Init = setprod dirs["diag"].Vals = numset } } } // traverse the matrix in slices of len(4) // down from the point at [x,y] for y := 0; y < len(matrix)-3; y++ { for x := 0; x < len(matrix); x++ { numset := []int{} for n := 0; n < 4; n++ { num := matrix[y+n][x] numset = append(numset, num) } setprod := goutils.GetProduct(numset) if setprod > dirs["down"].Init { dirs["down"].Init = setprod dirs["down"].Vals = numset } } } // traverse the matrix in slices of len(4) // up from the point at [x,y] for y := 3; y < len(matrix); y++ { for x := 0; x < len(matrix); x++ { numset := []int{} for n := 0; n < 4; n++ { num := matrix[y-n][x] numset = append(numset, num) } setprod := goutils.GetProduct(numset) if setprod > dirs["up"].Init { dirs["up"].Init = setprod dirs["up"].Vals = numset } } } // traverse the matrix in slices of len(4) // right from the point at [x,y] for y := 0; y < len(matrix); y++ { for x := 0; x < len(matrix)-3; x++ { numset := []int{} for n := 0; n < 4; n++ { num := matrix[y][x+n] numset = append(numset, num) } setprod := goutils.GetProduct(numset) if setprod > dirs["right"].Init { dirs["right"].Init = setprod dirs["right"].Vals = numset } } } // traverse the matrix in slices of len(4) // left from the point at [x,y] for y := 0; y < len(matrix); y++ { for x := 3; x < len(matrix); x++ { numset := []int{} for n := 0; n < 4; n++ { num := matrix[y][x-n] numset = append(numset, num) } setprod := goutils.GetProduct(numset) if setprod > dirs["left"].Init { dirs["left"].Init = setprod dirs["left"].Vals = numset } } } for key := range dirs { fmt.Println(dirs[key]) } }