Allow to set verbosity of output (Closes #26)

This commit is contained in:
2025-01-28 21:02:12 +01:00
parent 2bdcdcb1dd
commit cced4f04b2
14 changed files with 89 additions and 33 deletions

View File

@ -2,7 +2,6 @@ package solver
import (
"embed"
"log"
"strings"
"time"
)
@ -15,8 +14,8 @@ var f embed.FS
// Load all possible blocks from CSV in to memory
func (solver *Solver) LoadBlocks() {
defer solver.timeTrack(time.Now(), "Loaded blocks")
log.Println("Loading blocks")
defer solver.timeTrack(time.Now(), "Done!")
solver.Outp.Printf("Loading blocks... ")
var blocks []string

View File

@ -1,15 +1,14 @@
package solver
import (
"log"
"time"
)
// Find all possible blocks that can be used to find a solution.
func (solver *Solver) PopulateBlocks() {
defer solver.timeTrack(time.Now(), "Populated blocks")
log.Println("Populating blocks")
defer solver.timeTrack(time.Now(), "Done!")
solver.Outp.Printf("Populating blocks... ")
solver.findBlocks(&solver.Controller.Row1, &solver.row1s)
solver.findBlocks(&solver.Controller.Row2, &solver.row2s)

View File

@ -1,7 +1,6 @@
package solver
import (
"log"
"os"
"strconv"
"time"
@ -12,12 +11,12 @@ import (
// Modify solver.row1s so it limits the workload to what is only desired
func (solver *Solver) SelectWorkload() {
if solver.Controller.Split > len(solver.row1s) {
log.Println("ERROR: Unable to divide the workload in " + strconv.Itoa(solver.Controller.Split) + " parts, when only " + strconv.Itoa(len(solver.row1s)) + " are available.\n\n")
solver.Outp.Println("ERROR: Unable to divide the workload in " + strconv.Itoa(solver.Controller.Split) + " parts, when only " + strconv.Itoa(len(solver.row1s)) + " are available.\n\n")
os.Exit(1)
}
defer solver.timeTrack(time.Now(), "Workload set")
log.Println("Setting workload")
log.Println("We are agent " + strconv.Itoa(solver.Controller.Part) + " of " + strconv.Itoa(solver.Controller.Split))
solver.Outp.Println("Setting workload")
solver.Outp.Println("We are agent " + strconv.Itoa(solver.Controller.Part) + " of " + strconv.Itoa(solver.Controller.Split))
workloads := solver.splitWorkload()
solver.setWorkload(workloads)
}

View File

@ -1,7 +1,6 @@
package solver
import (
"log"
"strconv"
"time"
)
@ -12,7 +11,7 @@ func (solver *Solver) Tracker() {
// Add time tracking
defer solver.timeTrack(time.Now(), "Validated solutions")
log.Println("Validating solutions")
solver.Outp.Println("Validating solutions")
// Determine if the main-loop is done
var done bool
@ -73,7 +72,7 @@ func (solver *Solver) Tracker() {
}
// Printing the progress
log.Println("Processing: " + strconv.Itoa(int(percentage)) + "% (" + strconv.FormatUint(solver.counter.Load(), 10) + "/" + strconv.Itoa(int(solver.Iter)) + "); Rate: " + strconv.FormatUint(rateDiff, 10) + "/sec for " + timer_elapsed.String() + "; Time left (est.): " + est_fin)
solver.Outp.Println("Processing: " + strconv.Itoa(int(percentage)) + "% (" + strconv.FormatUint(solver.counter.Load(), 10) + "/" + strconv.Itoa(int(solver.Iter)) + "); Rate: " + strconv.FormatUint(rateDiff, 10) + "/sec for " + timer_elapsed.String() + "; Time left (est.): " + est_fin)
// After we are done printing, exit this for-loop
if percentage == 100 {

View File

@ -1,7 +1,6 @@
package solver
import (
"log"
"time"
)
@ -9,5 +8,5 @@ import (
// Use with `defer`
func (solver *Solver) timeTrack(start time.Time, msg string) {
elapsed := time.Since(start)
log.Printf("%s (%s)", msg, elapsed)
solver.Outp.Printf("%s (%s)\n", msg, elapsed)
}

View File

@ -4,6 +4,7 @@ import (
"sync/atomic"
"gitea.ligthert.net/golang/sudoku-funpark/controller"
"gitea.ligthert.net/golang/sudoku-funpark/outputter"
)
// Solve a given Sudoku puzzle by iterating through all possible solutions.
@ -33,4 +34,6 @@ type Solver struct {
counter atomic.Uint64
// Slice of rates for accurate duration estimation.
rates []uint64
// Reference to Outputter interface
Outp *outputter.Outputter
}