53 lines
896 B
Go
53 lines
896 B
Go
package day7
|
|
|
|
import (
|
|
"fmt"
|
|
"math"
|
|
"sort"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func Run(dat []byte) (int, int) {
|
|
|
|
fmt.Println("Day 7")
|
|
|
|
stringDat := strings.Split(string(dat), ",")
|
|
|
|
crabList := make([]int, len(stringDat))
|
|
for i, value := range stringDat {
|
|
num, _ := strconv.Atoi(value)
|
|
crabList[i] = num
|
|
}
|
|
|
|
sort.Ints(crabList)
|
|
|
|
median := crabList[len(crabList) / 2]
|
|
|
|
lowest := 100000000000
|
|
part2lowest := 10000000000000
|
|
|
|
for i := median - 200; i <= median + 200; i++ {
|
|
|
|
difference := 0
|
|
part2difference := 0
|
|
|
|
for _, n := range crabList {
|
|
currentDifference := math.Abs(float64(i) - float64(n))
|
|
difference += int(currentDifference)
|
|
part2difference += int((currentDifference / 2) * (currentDifference + 1))
|
|
}
|
|
|
|
if difference < lowest {
|
|
lowest = difference
|
|
}
|
|
|
|
if part2difference < part2lowest {
|
|
part2lowest = part2difference
|
|
}
|
|
|
|
}
|
|
|
|
return lowest, part2lowest
|
|
|
|
} |