Files

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,
}
}