Day 9
This commit is contained in:
parent
65a847f1d6
commit
71fa820871
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,75 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"sort"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
numbers := []int{}
|
||||||
|
|
||||||
|
file, _ := os.Open("input.txt")
|
||||||
|
defer file.Close()
|
||||||
|
for scanner := bufio.NewScanner(file); scanner.Scan(); {
|
||||||
|
number, _ := strconv.Atoi(scanner.Text())
|
||||||
|
numbers = append(numbers, number)
|
||||||
|
}
|
||||||
|
|
||||||
|
preambleLength := 25
|
||||||
|
preambleStart := 0
|
||||||
|
invalidNum := 0
|
||||||
|
for i, number := range numbers {
|
||||||
|
if i >= preambleLength {
|
||||||
|
valid := validNumber(preamble(numbers, preambleStart, preambleLength), number)
|
||||||
|
if !valid {
|
||||||
|
invalidNum = number
|
||||||
|
break
|
||||||
|
}
|
||||||
|
preambleStart++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Part 1:", invalidNum)
|
||||||
|
|
||||||
|
finalSet := []int{}
|
||||||
|
outer:
|
||||||
|
for i := 0; i < len(numbers)-1; i++ {
|
||||||
|
for j := len(numbers) - 1; j > i; j-- {
|
||||||
|
if testSet := numbers[i:j]; sum(testSet) == invalidNum {
|
||||||
|
finalSet = testSet
|
||||||
|
break outer
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sort.Ints(finalSet)
|
||||||
|
weakness := finalSet[0] + finalSet[len(finalSet)-1]
|
||||||
|
|
||||||
|
fmt.Println("Part 2:", weakness)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func preamble(n []int, start, length int) []int {
|
||||||
|
return n[start : start+length]
|
||||||
|
}
|
||||||
|
|
||||||
|
func validNumber(preamble []int, num int) bool {
|
||||||
|
for _, i := range preamble {
|
||||||
|
for _, j := range preamble {
|
||||||
|
if i+j == num && i != j {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func sum(slice []int) int {
|
||||||
|
sum := 0
|
||||||
|
for _, v := range slice {
|
||||||
|
sum += v
|
||||||
|
}
|
||||||
|
return sum
|
||||||
|
}
|
Reference in New Issue