package utils import ( "bufio" "fmt" "io" "log" "net/http" "os" ) type Solver interface { ParseInput(input []string) SolvePart1() any SolvePart2() any } func ReadInput(inputFileName string) ([]string, error) { var input = make([]string, 0) reader, err := os.Open(inputFileName) if err != nil { return input, fmt.Errorf("failed to open input file: %w", err) } scanner := bufio.NewScanner(reader) for scanner.Scan() { input = append(input, scanner.Text()) } return input, nil } func GetInputFileName(dayNumber int, testMode bool) string { var testString string if testMode { testString = "test" } else { testString = "prod" } return fmt.Sprintf("day%d/%s.in.txt", dayNumber, testString) } func DownloadInput(sessionCookie string, dayNumber int, inputFileName string) error { req, err := http.NewRequest("GET", fmt.Sprintf("https://adventofcode.com/2022/day/%d/input", dayNumber), nil) if err != nil { log.Fatalf("couldn't create reques: %s", err) } req.AddCookie(&http.Cookie{Name: "session", Value: sessionCookie}) resp, err := http.DefaultClient.Do(req) if err != nil { return err } defer resp.Body.Close() writer, err := os.Create(inputFileName) if err != nil { return err } if _, err := io.Copy(writer, resp.Body); err != nil { return err } return nil }