AoC2021/src/day7/day7.go
2021-12-07 11:46:07 +01:00

48 lines
1.1 KiB
Go

package main
import (
"AOC2021/src/helper"
"fmt"
"os"
"strings"
)
func main() {
args := os.Args[1:]
input, err := helper.GetInput(args[0])
if err != nil {
fmt.Println(err)
}
inputNumbers, _ := helper.MapToNumber(strings.Split(input[0], ","))
crabMap := make(map[int]int)
maxPosition := 0
for _, inputNumber := range inputNumbers {
if maxPosition < inputNumber {
maxPosition = inputNumber
}
crabMap[inputNumber] += 1
}
lowestFuelConsumption := calculate(crabMap, maxPosition/2, 9999999999)
for i:= 0; i < maxPosition; i++ {
fuelConsumption :=calculate(crabMap, i, lowestFuelConsumption)
if fuelConsumption < lowestFuelConsumption {
lowestFuelConsumption = fuelConsumption
}
}
fmt.Println(lowestFuelConsumption)
}
func calculate(crabMap map[int]int, goalPosition int, currentLowestFullConsumption int) int {
sum := 0
for positionCrab, amount := range crabMap {
distance := helper.Abs(positionCrab-goalPosition)
sum += ((distance) * (distance + 1)/2) * amount
if sum > currentLowestFullConsumption {
return sum
}
}
return sum
}