Day 9.
parent
f7bf844b03
commit
b89ad15329
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,73 @@
|
|||
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
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,104 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"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
|
||||
allNumbers := []int{}
|
||||
|
||||
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)
|
||||
fmt.Printf("%d numbers tracked\n", len(allNumbers))
|
||||
|
||||
// find contiguous set of numbers that add up to this invalid number
|
||||
weaknessloop:
|
||||
for i1 := range allNumbers {
|
||||
for i2 := i1 + 1; i2 < len(allNumbers); i2++ {
|
||||
sum := 0
|
||||
min := math.MaxInt32
|
||||
max := math.MinInt32
|
||||
for i := i1; i <= i2; i++ {
|
||||
newNum := allNumbers[i]
|
||||
if min > newNum {
|
||||
min = newNum
|
||||
}
|
||||
if max < newNum {
|
||||
max = newNum
|
||||
}
|
||||
sum += newNum
|
||||
}
|
||||
if sum == number {
|
||||
fmt.Printf("min: %d\n", min)
|
||||
fmt.Printf("max: %d\n", max)
|
||||
fmt.Printf("weakness: %d\n", min+max)
|
||||
break weaknessloop
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
allNumbers = append(allNumbers, number)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue