main.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package main
  2. import (
  3. "fmt"
  4. "runtime"
  5. "strconv"
  6. "gitea.ligthert.net/golang/sudoku-funpark/controller"
  7. "gitea.ligthert.net/golang/sudoku-funpark/export"
  8. "gitea.ligthert.net/golang/sudoku-funpark/flags"
  9. "gitea.ligthert.net/golang/sudoku-funpark/outputter"
  10. "gitea.ligthert.net/golang/sudoku-funpark/solver"
  11. )
  12. func main() {
  13. // Instantiate the interfaces
  14. controller := controller.Controller{}
  15. outp := outputter.Outputter{}
  16. export := export.Export{Controller: &controller}
  17. flags := flags.Flags{Controller: &controller}
  18. solver := solver.Solver{Controller: &controller, Outp: &outp}
  19. // Parse and handle flags
  20. flags.ParseFlags()
  21. // Tell outp what kind of output is expected.
  22. outp.OutputType = controller.Print
  23. // Report number of CPUs being used, if set.
  24. if runtime.NumCPU() != controller.NumCPUs {
  25. outp.Println("Using " + strconv.Itoa(controller.NumCPUs) + " CPUs, (was " + strconv.Itoa(runtime.NumCPU()) + ")")
  26. }
  27. // Load blocks from CSV file
  28. solver.LoadBlocks()
  29. // Find rows that fit with the entered rows
  30. solver.PopulateBlocks()
  31. // If needed, split the workload
  32. // May exit and throw an error if the work load isn't viable
  33. if controller.Split != 1 {
  34. solver.SelectWorkload()
  35. }
  36. // Print the total number of solutions to validate
  37. outp.Println("Number of (potential) solutions:", solver.Iter)
  38. // Check the number of solutions
  39. //go solver.CheckCombinations()
  40. go solver.ManageSolver()
  41. solver.Tracker()
  42. outp.Println("Average rate per second: " + strconv.Itoa(int(solver.CalcAvgRate())))
  43. fmt.Println(export.Export())
  44. // fmt.Printf("benchmark,%d,%s, %s\n", controller.NumCPUs, controller.Duration, strconv.Itoa(int(solver.CalcAvgRate())))
  45. }