package solver import ( "log" "runtime" "strconv" ) // The main loop that orchastrates all the logic. func Run() { // Instantiate the Solver interface solver := Solver{} // Parse and handle flags solver.parseFlags() // Report number of CPUs being used, if set. if runtime.NumCPU() != solver.numCPUs { log.Println("Using " + strconv.Itoa(solver.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 solver.split != 1 { solver.selectWorkload() } // Print the total number of solutions to validate log.Println("Number of (potential) solutions:", solver.iter) // Check the number of solutions go solver.checkCombinations() solver.tracker() // Print the valid solutions solver.printSolutions() }