1
Fork 0
This commit is contained in:
Jan-Lukas Else 2020-12-09 08:25:32 +01:00
parent 65a847f1d6
commit 71fa820871
2 changed files with 1075 additions and 0 deletions

1000
9/input.txt Normal file

File diff suppressed because it is too large Load Diff

75
9/main.go Normal file
View File

@ -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
}