Improved parameter handling.

This commit is contained in:
Sacha Ligthert 2025-01-23 23:55:40 +01:00
parent c02aea543c
commit 6cd8deed23

View File

@ -31,17 +31,15 @@ func (solver *Solver) parse_flags() {
flag.StringVar(&row8, "row8", "000000000", "8th row of the sudoku puzzle.")
flag.StringVar(&row9, "row9", "000000000", "9th row of the sudoku puzzle.")
// Print additional help data
flag.Usage = func() {
fmt.Fprintf(flag.CommandLine.Output(), "Usages of %s:\n", os.Args[0])
fmt.Fprintf(flag.CommandLine.Output(), "\nPut every row of a Sudoku puzzle as paramters.\nUse '0' for what is currently blank in the puzzle you wish to solve.\n\n")
fmt.Fprintf(flag.CommandLine.Output(), "Example: %s -row1 ... -row2 ... -row3 ... (etc)\n\n", os.Args[0])
flag.PrintDefaults()
}
// Parse the flags
flag.Parse()
if row1 == "000000000" || row2 == "000000000" || row3 == "000000000" || row4 == "000000000" || row5 == "000000000" || row6 == "000000000" || row7 == "000000000" || row8 == "000000000" || row9 == "000000000" {
log.Printf("ERROR: All parameters must be entered.\n\n")
solver.print_Usage()
os.Exit(1)
}
// Validate the row (never trust user input)
solver.validate_row("row1", row1)
solver.validate_row("row2", row2)
@ -74,7 +72,8 @@ func (solver *Solver) validate_row(name string, row string) {
// 1. Make sure the row is 9 in length
if len(row) != 9 {
log.Printf("ERROR: Invalid length of %s; %s must be 9 numbers", name, row)
log.Printf("ERROR: Invalid length of %s (%s), must be 9 numbers\n\n", name, row)
solver.print_Usage()
os.Exit(1)
}
@ -84,7 +83,8 @@ func (solver *Solver) validate_row(name string, row string) {
}
if !found {
log.Printf("ERROR: Invalid character of %s; %s must be 9 numbers", name, row)
log.Printf("ERROR: Invalid character of %s (%s), must be 9 numbers\n\n", name, row)
solver.print_Usage()
os.Exit(1)
}
@ -100,7 +100,8 @@ func (solver *Solver) validate_row(name string, row string) {
}
if double {
log.Printf("ERROR: Double character of %s; %s numbers between 1 and 9 may only be entered once", name, row)
log.Printf("ERROR: Double character of %s (%s), numbers between 1 and 9 may only be entered once\n\n", name, row)
solver.print_Usage()
os.Exit(1)
}
@ -118,3 +119,10 @@ func (solver *Solver) valid_char(char rune) bool {
return valid
}
func (solver *Solver) print_Usage() {
fmt.Fprintf(flag.CommandLine.Output(), "Usage of %s:\n", os.Args[0])
fmt.Fprintf(flag.CommandLine.Output(), "\nPut every row of a Sudoku puzzle as paramters.\nUse '0' for what is currently blank in the puzzle you wish to solve.\n\n")
fmt.Fprintf(flag.CommandLine.Output(), "Example: %s -row1 ... -row2 ... -row3 ... (etc)\n\n", os.Args[0])
flag.PrintDefaults()
}