package main import ( "fmt" "log" "os" "strings" ) func showUsage() { print(len(os.Args)) fmt.Printf("Usage: %s [input.txt]\n", os.Args[0]) } type DayPartSolver func([]string) error type DaySolver struct { day1 DayPartSolver day2 DayPartSolver } func main() { if (len(os.Args) < 3) { showUsage() return } day := os.Args[1] part := os.Args[2] var input_filename string if len(os.Args) <= 3 { input_filename = "input.txt" } else { input_filename = os.Args[3] } contents, err := os.ReadFile(input_filename) if err != nil { log.Fatal(err) } lines := strings.Split(strings.TrimRight(string(contents), "\n"), "\n") solvers := make(map[string]DaySolver) solvers["1"] = DaySolver{ day1: Day1Part1, day2: Day1Part2 } solvers["2"] = DaySolver{ day1: Day2Part1, day2: Day2Part2 } solvers["3"] = DaySolver{ day1: Day3Part1, day2: Day3Part2 } solvers["4"] = DaySolver{ day1: Day4Part1, day2: Day4Part2 } solver, ok := solvers[day] if ok { var err error if part == "1" { err = solver.day1(lines) } else if part == "2" { err = solver.day1(lines) } if err != nil { log.Fatal(err) } } else { log.Fatal("Day not found") } }