|
@@ -38,32 +38,21 @@ func readInput(file string) (map[int]int, []int) {
|
|
|
return crabs, orderedCrabs
|
|
|
}
|
|
|
|
|
|
-func part1(crabs map[int]int, orderedCrabs []int) int {
|
|
|
- shortest := 10000000
|
|
|
-
|
|
|
- for _, crab := range orderedCrabs {
|
|
|
- route := 0
|
|
|
- for key, value := range crabs {
|
|
|
- if key == crab {
|
|
|
- continue
|
|
|
- }
|
|
|
+func costPart1(steps int, value int) int {
|
|
|
+ return steps * value
|
|
|
+}
|
|
|
|
|
|
- if key < crab {
|
|
|
- route += (crab - key) * value
|
|
|
- } else {
|
|
|
- route += (key - crab) * value
|
|
|
- }
|
|
|
- }
|
|
|
+func costPart2(steps int, value int) int {
|
|
|
+ cost := 0
|
|
|
|
|
|
- if route < shortest {
|
|
|
- shortest = route
|
|
|
- }
|
|
|
+ for i := 0; i < steps; i++ {
|
|
|
+ cost += (i + 1) * value
|
|
|
}
|
|
|
|
|
|
- return shortest
|
|
|
+ return cost
|
|
|
}
|
|
|
|
|
|
-func part2(crabs map[int]int, orderedCrabs []int) int {
|
|
|
+func calculate(crabs map[int]int, orderedCrabs []int, cost func(int, int) int) int {
|
|
|
shortest := 1000000000
|
|
|
|
|
|
max := orderedCrabs[len(orderedCrabs)-1]
|
|
@@ -81,9 +70,7 @@ func part2(crabs map[int]int, orderedCrabs []int) int {
|
|
|
steps = key - crab
|
|
|
}
|
|
|
|
|
|
- for i := 0; i < steps; i++ {
|
|
|
- route += (i + 1) * value
|
|
|
- }
|
|
|
+ route += cost(steps, value)
|
|
|
}
|
|
|
|
|
|
if route < shortest {
|
|
@@ -100,6 +87,6 @@ func main() {
|
|
|
}
|
|
|
|
|
|
crabs, orderedCrabs := readInput(os.Args[1])
|
|
|
- fmt.Println("Part1: ", part1(crabs, orderedCrabs))
|
|
|
- fmt.Println("Part2: ", part2(crabs, orderedCrabs))
|
|
|
+ fmt.Println("Part1: ", calculate(crabs, orderedCrabs, costPart1))
|
|
|
+ fmt.Println("Part2: ", calculate(crabs, orderedCrabs, costPart2))
|
|
|
}
|