package main import ( "bufio" "fmt" "os" "strings" "time" ) const FILE_PATH = "./input.txt" //const FILE_PATH = "./sample.txt" func LoadInput(filename string) ([]string, error) { file, err := os.Open(filename) if err != nil { return nil, err } defer file.Close() var lines []string scanner := bufio.NewScanner(file) for scanner.Scan() { lines = append(lines, scanner.Text()) } if err := scanner.Err(); err != nil { return nil, err } return lines, nil } type Puzzle struct { poss []string lines []string } type structuredInput = Puzzle func TransformInput(lines []string) structuredInput { return Puzzle{strings.Split(lines[0], ", "), lines[2:]} } func Part1(input structuredInput) int { var result = 0 var poss []string var found bool var work string for i, line := range input.lines { fmt.Println(i) poss = []string{line} found = false for !found && len(poss) > 0 { work = poss[0] poss = poss[1:] for j := 0; j < len(input.poss); j++ { if len(input.poss[j]) <= len(work) { if work[:len(input.poss[j])] == input.poss[j] { poss = append(poss, work[len(input.poss[j]):]) if len(work[len(input.poss[j]):]) == 0 { found = true break } } } } } if found { result += 1 } } return result } func Part2(input structuredInput) int { var result = 0 return result } func main() { var start time.Time var elapsed time.Duration = 0 input, err := LoadInput(FILE_PATH) if err != nil { fmt.Println("Error loading input:", err) return } structuredInput := TransformInput(input) fmt.Println("Structured Input:", structuredInput) start = time.Now() fmt.Println("Solution Part 1: ", Part1(structuredInput)) elapsed = time.Since(start) fmt.Printf("Part 1 took %s\n", elapsed) start = time.Now() fmt.Println("Solution Part 2: ", Part2(structuredInput)) elapsed = time.Since(start) fmt.Printf("Part 2 took %s\n", elapsed) }