refactor: create functions that we gonna use for part two

This commit is contained in:
2025-12-02 22:10:12 +01:00
parent c61e573e14
commit 86370f27c8

View File

@@ -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{{}}
} }
@@ -60,12 +65,22 @@ 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
} }