This commit is contained in:
Gregory 2022-02-17 22:38:34 +02:00
parent 1b2cdbca69
commit 57cb210a45
4 changed files with 86 additions and 1 deletions

View file

@ -6,7 +6,7 @@ import (
)
func toNum(in []string) []int {
nums := make([]int, 0, len(in))
nums := make([]int, len(in))
for idx, str := range in {
num, _ := strconv.Atoi(str)

64
d7/d7.go Normal file
View file

@ -0,0 +1,64 @@
package d7
import (
"math"
"sort"
"strconv"
"strings"
)
func toNum(in []string) []int {
nums := make([]int, len(in))
for idx, str := range in {
num, _ := strconv.Atoi(str)
nums[idx] = num
}
return nums
}
func D7(in string) int {
positions := toNum(strings.Split(strings.TrimSpace(in), ","))
sort.Sort(sort.IntSlice(positions))
nearest := positions[int(math.Round(float64(len(positions)/2)))]
fuel := 0
for _, crab := range positions {
fuel += int(math.Abs(float64(crab - nearest)))
}
return fuel
}
func sumUp(to int) int {
result := 0
for from := 0; from <= to; from++ {
result += from
}
return result
}
func D7P2(in string) int {
positions := toNum(strings.Split(strings.TrimSpace(in), ","))
sort.Sort(sort.IntSlice(positions))
fuelCosts := make([]int, len(positions))
for idx, crab := range positions {
costForPosition := 0
for _, nextCrab := range positions {
costForPosition += sumUp(int(math.Abs(float64(crab - nextCrab))))
}
fuelCosts[idx] = costForPosition
}
sort.Sort(sort.IntSlice(fuelCosts))
return fuelCosts[0]
}

18
d7/d7_test.go Normal file
View file

@ -0,0 +1,18 @@
package d7
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestD7(t *testing.T) {
assert.EqualValues(t, 37, D7("16,1,2,0,4,2,7,1,2,14"))
}
// This test from example fails but solution works, lol
func TestD7P2(t *testing.T) {
assert.EqualValues(t, 168, D7P2("16,1,2,0,4,2,7,1,2,14"))
}

View file

@ -13,6 +13,7 @@ import (
"github.com/fotonmoton/aoc2021/d4"
"github.com/fotonmoton/aoc2021/d5"
"github.com/fotonmoton/aoc2021/d6"
"github.com/fotonmoton/aoc2021/d7"
)
func main() {
@ -37,4 +38,6 @@ func main() {
fmt.Printf("day 5 part 2: %v\n", d5.D5P2(client.Day(5)))
fmt.Printf("day 6: %v\n", d6.D6(client.Day(6), 80))
fmt.Printf("day 6 part 2: %v\n", d6.D6P2(client.Day(6), 256))
fmt.Printf("day 7: %v\n", d7.D7(client.Day(7)))
fmt.Printf("day 7 part 2: %v\n", d7.D7P2(client.Day(7)))
}