package main import ( "fmt" "io/ioutil" "sort" "strconv" "strings" ) func main() { d, _ := ioutil.ReadFile("input") strings := strings.Split(string(d), "\n") bad := 0 var ints []int done := false for _, s := range strings { i, err := strconv.Atoi(s) if err == nil { ints = append(ints, i) } } for i, _ := range ints { if !((i + 26) > len(ints)) { slice := ints[i : i+25] sums := make(map[int]struct{}) for _, n := range slice { for _, n2 := range slice { if n != n2 { sums[n+n2] = struct{}{} } } } bad = ints[i+25] has := false for i, _ := range sums { if bad == i { has = true } } if has == false { fmt.Println("Part 1:", bad) break done = true } if done == true { break } } if done == true { break } } // Part 2: let's just brute force this l := 2 for { for x := 0; x < len(ints); x += 1 { sl := ints[x : x+l] total := 0 for _, digit := range sl { total += digit } if total == bad { sort.Ints(sl) // a bad bodge fmt.Printf("Part 2: %d\n", sl[0]+sl[len(sl)-1:][0]) fmt.Println(sl) return } } l++ } }