main.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. solver.Tracker()
  41. fmt.Println(export.Export())
  42. }