// SPDX-License-Identifier: Apache-2.0 package main import ( "flag" "image" "image/png" "log" "math/rand" "os" "time" "smariot.com/tsp" "smariot.com/tsp/maze" ) func main() { var ( w, h int seed int64 imagePath string ) flag.IntVar(&w, "w", 20, "width of the maze") flag.IntVar(&h, "h", 15, "height of the maze") flag.StringVar(&imagePath, "o", "maze.png", "output image path") flag.Int64Var(&seed, "seed", rand.Int63(), "random seed") flag.Parse() t := time.Now() m := maze.Make(image.Rect(0, 0, w, h), rand.New(rand.NewSource(seed))) log.Printf("created maze in %v", time.Since(t)) t = time.Now() path, err := tsp.Solve(maze.NewProblem(m.Size, m.Start, m.End, m.Right, m.Down), 0) log.Printf("solved maze in %v", time.Since(t)) if err != nil { log.Printf("failed to solve maze: %v", err) } t = time.Now() image := m.Draw(path) log.Printf("drawn maze in %v", time.Since(t)) f, err := os.Create(imagePath) if err != nil { log.Fatalf("failed to create image file: %v", err) } t = time.Now() if err := png.Encode(f, image); err != nil { log.Fatalf("failed to write image: %v", err) } log.Printf("wrote image in %v", time.Since(t)) if err := f.Close(); err != nil { log.Fatalf("failed to close image file: %v", err) } }