|
@@ -63,6 +63,37 @@ func part1(crabs map[int]int, orderedCrabs []int) int {
|
|
return shortest
|
|
return shortest
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func part2(crabs map[int]int, orderedCrabs []int) int {
|
|
|
|
+ shortest := 1000000000
|
|
|
|
+
|
|
|
|
+ max := orderedCrabs[len(orderedCrabs)-1]
|
|
|
|
+ for crab := orderedCrabs[0]; crab <= max; crab++ {
|
|
|
|
+ route := 0
|
|
|
|
+ for key, value := range crabs {
|
|
|
|
+ if key == crab {
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ steps := 0
|
|
|
|
+ if key < crab {
|
|
|
|
+ steps = crab - key
|
|
|
|
+ } else {
|
|
|
|
+ steps = key - crab
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for i := 0; i < steps; i++ {
|
|
|
|
+ route += (i + 1) * value
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if route < shortest {
|
|
|
|
+ shortest = route
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return shortest
|
|
|
|
+}
|
|
|
|
+
|
|
func main() {
|
|
func main() {
|
|
if len(os.Args) < 2 {
|
|
if len(os.Args) < 2 {
|
|
log.Fatal("Please provide a file name as argument")
|
|
log.Fatal("Please provide a file name as argument")
|
|
@@ -70,4 +101,5 @@ func main() {
|
|
|
|
|
|
crabs, orderedCrabs := readInput(os.Args[1])
|
|
crabs, orderedCrabs := readInput(os.Args[1])
|
|
fmt.Println("Part1: ", part1(crabs, orderedCrabs))
|
|
fmt.Println("Part1: ", part1(crabs, orderedCrabs))
|
|
|
|
+ fmt.Println("Part2: ", part2(crabs, orderedCrabs))
|
|
}
|
|
}
|