Add the ability to select type of output.

This commit is contained in:
Sacha Ligthert 2025-01-28 01:04:38 +01:00
parent a7c5845b7a
commit 515034a64e
5 changed files with 34 additions and 2 deletions

View File

@ -30,4 +30,6 @@ type Controller struct {
Split int Split int
// Which part of the search should the solver focus on. // Which part of the search should the solver focus on.
Part int Part int
// Type of output requested
Output string
} }

14
export/flat.go Normal file
View File

@ -0,0 +1,14 @@
package export
import (
"fmt"
"log"
)
// Print solutions into a human friendly format for in the console.
func (export *Export) PrintFlatSolutions() {
for solutionIndex, solution := range export.Controller.Solutions {
log.Printf("\nSolution #%d:", solutionIndex+1)
fmt.Println(solution)
}
}

View File

@ -6,7 +6,7 @@ import (
) )
// Print solutions into a human friendly format for in the console. // Print solutions into a human friendly format for in the console.
func (export *Export) PrintSolutions() { func (export *Export) PrintHumanSolutions() {
for solutionIndex, solution := range export.Controller.Solutions { for solutionIndex, solution := range export.Controller.Solutions {
log.Printf("\nSolution #%d:", solutionIndex+1) log.Printf("\nSolution #%d:", solutionIndex+1)
//fmt.Println(solution) //fmt.Println(solution)

View File

@ -6,6 +6,7 @@ import (
"log" "log"
"os" "os"
"runtime" "runtime"
"strings"
) )
// Parse command-line parameters, test input, store them in the Controller. // Parse command-line parameters, test input, store them in the Controller.
@ -24,6 +25,7 @@ func (flags *Flags) ParseFlags() {
flag.IntVar(&flags.Controller.NumCPUs, "numcpu", runtime.NumCPU(), "Number of CPU cores to assign to this task.") flag.IntVar(&flags.Controller.NumCPUs, "numcpu", runtime.NumCPU(), "Number of CPU cores to assign to this task.")
flag.IntVar(&flags.Controller.Split, "split", 1, "Split the tasks in n parts. This depends on the availability of the first row.") flag.IntVar(&flags.Controller.Split, "split", 1, "Split the tasks in n parts. This depends on the availability of the first row.")
flag.IntVar(&flags.Controller.Part, "part", 1, "Process part x in n parts. Cannot be lower than 1, or higher than specified in split.") flag.IntVar(&flags.Controller.Part, "part", 1, "Process part x in n parts. Cannot be lower than 1, or higher than specified in split.")
flag.StringVar(&flags.Controller.Output, "output", "human", "Type of output. 'human' for human readable. 'flat' for flat as stored in memory output.")
// Parse the flags // Parse the flags
flag.Parse() flag.Parse()
@ -72,6 +74,14 @@ func (flags *Flags) ParseFlags() {
os.Exit(1) os.Exit(1)
} }
// Process output selection
flags.Controller.Output = strings.ToLower(flags.Controller.Output)
if flags.Controller.Output != "human" && flags.Controller.Output != "flat" {
log.Printf("ERROR: Invalid output, can only be 'human' or 'flat'.\n")
flags.printUsage()
os.Exit(1)
}
} }
// Validate if a row is properly set. // Validate if a row is properly set.

View File

@ -46,5 +46,11 @@ func main() {
solver.Tracker() solver.Tracker()
// Print the valid solutions // Print the valid solutions
export.PrintSolutions() switch controller.Output {
case "human":
export.PrintHumanSolutions()
case "flat":
export.PrintFlatSolutions()
}
} }