43 lines
791 B
Go
43 lines
791 B
Go
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,
|
|
}
|
|
}
|