56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"runtime"
|
|
"strconv"
|
|
|
|
"gitea.ligthert.net/golang/sudoku-funpark/controller"
|
|
"gitea.ligthert.net/golang/sudoku-funpark/export"
|
|
"gitea.ligthert.net/golang/sudoku-funpark/flags"
|
|
"gitea.ligthert.net/golang/sudoku-funpark/outputter"
|
|
"gitea.ligthert.net/golang/sudoku-funpark/solver"
|
|
)
|
|
|
|
func main() {
|
|
// Instantiate the interfaces
|
|
controller := controller.Controller{}
|
|
outp := outputter.Outputter{}
|
|
export := export.Export{Controller: &controller}
|
|
flags := flags.Flags{Controller: &controller}
|
|
solver := solver.Solver{Controller: &controller, Outp: &outp}
|
|
|
|
// Parse and handle flags
|
|
flags.ParseFlags()
|
|
|
|
// Tell outp what kind of output is expected.
|
|
outp.OutputType = controller.Print
|
|
|
|
// Report number of CPUs being used, if set.
|
|
if runtime.NumCPU() != controller.NumCPUs {
|
|
outp.Println("Using " + strconv.Itoa(controller.NumCPUs) + " CPUs, (was " + strconv.Itoa(runtime.NumCPU()) + ")")
|
|
}
|
|
|
|
// Load blocks from CSV file
|
|
solver.LoadBlocks()
|
|
|
|
// Find rows that fit with the entered rows
|
|
solver.PopulateBlocks()
|
|
|
|
// If needed, split the workload
|
|
// May exit and throw an error if the work load isn't viable
|
|
if controller.Split != 1 {
|
|
solver.SelectWorkload()
|
|
}
|
|
|
|
// Print the total number of solutions to validate
|
|
outp.Println("Number of (potential) solutions:", solver.Iter)
|
|
|
|
// Check the number of solutions
|
|
go solver.CheckCombinations()
|
|
solver.Tracker()
|
|
|
|
fmt.Println(export.Export())
|
|
|
|
}
|