refactor: create functions that we gonna use for part two
This commit is contained in:
@@ -17,7 +17,7 @@ func ParseInput(filepath string) []string {
|
|||||||
return strings.Split(string(content), "\n")
|
return strings.Split(string(content), "\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
func PartOne(data []string) int {
|
func buildDistanceMap(data []string) map[string]map[string]int {
|
||||||
distances := make(map[string]map[string]int)
|
distances := make(map[string]map[string]int)
|
||||||
|
|
||||||
for _, line := range data {
|
for _, line := range data {
|
||||||
@@ -37,13 +37,18 @@ func PartOne(data []string) int {
|
|||||||
distances[to][from] = distance
|
distances[to][from] = distance
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return distances
|
||||||
|
}
|
||||||
|
|
||||||
|
func getCities(distances map[string]map[string]int) []string {
|
||||||
cities := make([]string, 0, len(distances))
|
cities := make([]string, 0, len(distances))
|
||||||
for city := range distances {
|
for city := range distances {
|
||||||
cities = append(cities, city)
|
cities = append(cities, city)
|
||||||
}
|
}
|
||||||
|
return cities
|
||||||
|
}
|
||||||
|
|
||||||
var generatePermutations func([]string) [][]string
|
func generatePermutations(cities []string) [][]string {
|
||||||
generatePermutations = func(cities []string) [][]string {
|
|
||||||
if len(cities) == 0 {
|
if len(cities) == 0 {
|
||||||
return [][]string{{}}
|
return [][]string{{}}
|
||||||
}
|
}
|
||||||
@@ -58,14 +63,24 @@ func PartOne(data []string) int {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
minimalDistance := int(^uint(0) >> 1)
|
func calculateRouteDistance(route []string, distances map[string]map[string]int) int {
|
||||||
for _, route := range generatePermutations(cities) {
|
|
||||||
total := 0
|
total := 0
|
||||||
for idx := 0; idx < len(route)-1; idx++ {
|
for idx := 0; idx < len(route)-1; idx++ {
|
||||||
total += distances[route[idx]][route[idx+1]]
|
total += distances[route[idx]][route[idx+1]]
|
||||||
}
|
}
|
||||||
|
return total
|
||||||
|
}
|
||||||
|
|
||||||
|
func PartOne(data []string) int {
|
||||||
|
distances := buildDistanceMap(data)
|
||||||
|
cities := getCities(distances)
|
||||||
|
permutations := generatePermutations(cities)
|
||||||
|
|
||||||
|
minimalDistance := int(^uint(0) >> 1)
|
||||||
|
for _, route := range permutations {
|
||||||
|
total := calculateRouteDistance(route, distances)
|
||||||
if total < minimalDistance {
|
if total < minimalDistance {
|
||||||
minimalDistance = total
|
minimalDistance = total
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user