refactor: massive refactor to have only one binary to call
This commit is contained in:
42
internal/registry/registry.go
Normal file
42
internal/registry/registry.go
Normal file
@@ -0,0 +1,42 @@
|
||||
package registry
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
)
|
||||
|
||||
type Runner interface {
|
||||
Run(input string, part string)
|
||||
}
|
||||
|
||||
type DayRunner[T any] struct {
|
||||
ParseInput func(string) T
|
||||
PartOne func(T) int
|
||||
PartTwo func(T) int
|
||||
}
|
||||
|
||||
func (r *DayRunner[T]) Run(input string, part string) {
|
||||
data := r.ParseInput(input)
|
||||
switch part {
|
||||
case "":
|
||||
fmt.Println(r.PartOne(data))
|
||||
fmt.Println(r.PartTwo(data))
|
||||
case "1":
|
||||
fmt.Println(r.PartOne(data))
|
||||
case "2":
|
||||
fmt.Println(r.PartTwo(data))
|
||||
default:
|
||||
fmt.Fprintf(os.Stderr, "Invalid part: %s\n", part)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
var Days = make(map[string]any)
|
||||
|
||||
func Register[T any](key string, parseInput func(string) T, partOne func(T) int, partTwo func(T) int) {
|
||||
Days[key] = &DayRunner[T]{
|
||||
ParseInput: parseInput,
|
||||
PartOne: partOne,
|
||||
PartTwo: partTwo,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user