adventofcode-2020/day9/part1/main.go

74 lines
1003 B
Go
Raw Permalink Normal View History

2020-12-09 22:52:25 +00:00
package main
import (
"fmt"
"io"
"os"
)
type validator struct {
Numbers []int
}
func newValidator() *validator {
return &validator{
Numbers: []int{},
}
}
func (v *validator) validate(number int) (ok bool) {
for i1, num1 := range v.Numbers {
for i2, num2 := range v.Numbers {
if i1 == i2 {
continue
}
if num1+num2 == number {
ok = true
return
}
}
}
return
}
func (v *validator) Feed(number int) (ok bool) {
if len(v.Numbers) >= 25 {
// check if valid number
if !v.validate(number) {
return
}
v.Numbers = append(v.Numbers[len(v.Numbers)-24:], number)
} else {
v.Numbers = append(v.Numbers, number)
}
ok = true
return
}
func main() {
f, err := os.Open("input")
if err != nil {
panic(err)
}
v := newValidator()
number := 0
for {
_, err := fmt.Fscanf(f, "%d\n", &number)
if err == io.EOF {
break
}
if err != nil {
panic(err)
}
if !v.Feed(number) {
fmt.Printf("%d does not validate\n", number)
break
}
}
}