main.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package main
  2. import (
  3. "log"
  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/solver"
  10. )
  11. func main() {
  12. // Instantiate the interfaces
  13. controller := controller.Controller{}
  14. export := export.Export{Controller: &controller}
  15. flags := flags.Flags{Controller: &controller}
  16. solver := solver.Solver{Controller: &controller}
  17. // Parse and handle flags
  18. flags.ParseFlags()
  19. // Report number of CPUs being used, if set.
  20. if runtime.NumCPU() != controller.NumCPUs {
  21. log.Println("Using " + strconv.Itoa(controller.NumCPUs) + " CPUs, (was " + strconv.Itoa(runtime.NumCPU()) + ")")
  22. }
  23. // Load blocks from CSV file
  24. solver.LoadBlocks()
  25. // Find rows that fit with the entered rows
  26. solver.PopulateBlocks()
  27. // If needed, split the workload
  28. // May exit and throw an error if the work load isn't viable
  29. if controller.Split != 1 {
  30. solver.SelectWorkload()
  31. }
  32. // Print the total number of solutions to validate
  33. log.Println("Number of (potential) solutions:", solver.Iter)
  34. // Check the number of solutions
  35. go solver.CheckCombinations()
  36. solver.Tracker()
  37. // Print the valid solutions
  38. switch controller.Output {
  39. case "human":
  40. export.PrintHumanSolutions()
  41. case "flat":
  42. export.PrintFlatSolutions()
  43. }
  44. }