|
|
|
@ -4,6 +4,7 @@ import (
|
|
|
|
"fmt"
|
|
|
|
"fmt"
|
|
|
|
"math"
|
|
|
|
"math"
|
|
|
|
"strings"
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"sync"
|
|
|
|
|
|
|
|
|
|
|
|
"gitea.paas.celticinfo.fr/oabrivard/aoc2023/utils"
|
|
|
|
"gitea.paas.celticinfo.fr/oabrivard/aoc2023/utils"
|
|
|
|
)
|
|
|
|
)
|
|
|
|
@ -38,7 +39,7 @@ func buildMapList(start int, lines []string) ([]*SrcToDest, int) {
|
|
|
|
|
|
|
|
|
|
|
|
func srcToDest(src int64, stdList []*SrcToDest) int64 {
|
|
|
|
func srcToDest(src int64, stdList []*SrcToDest) int64 {
|
|
|
|
for _, std := range stdList {
|
|
|
|
for _, std := range stdList {
|
|
|
|
if std.src <= src && src <= std.src+std.rng {
|
|
|
|
if std.src <= src && src <= std.src+std.rng-1 {
|
|
|
|
return src + std.dst - std.src
|
|
|
|
return src + std.dst - std.src
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -87,12 +88,17 @@ func FindRangedClosestLocation(lines []string) int64 {
|
|
|
|
tempToHumid, i := buildMapList(i, lines)
|
|
|
|
tempToHumid, i := buildMapList(i, lines)
|
|
|
|
humidToLoc, _ := buildMapList(i, lines)
|
|
|
|
humidToLoc, _ := buildMapList(i, lines)
|
|
|
|
|
|
|
|
|
|
|
|
result := int64(math.MaxInt64)
|
|
|
|
var wg sync.WaitGroup
|
|
|
|
|
|
|
|
ch := make(chan int64, len(seeds)/2)
|
|
|
|
|
|
|
|
|
|
|
|
count := 0
|
|
|
|
|
|
|
|
for i := 0; i < len(seeds); i += 2 {
|
|
|
|
for i := 0; i < len(seeds); i += 2 {
|
|
|
|
count++
|
|
|
|
wg.Add(1)
|
|
|
|
for seed := seeds[i]; seed < seeds[i]+seeds[i+1]; seed++ {
|
|
|
|
|
|
|
|
|
|
|
|
go func(s int64, r int64) {
|
|
|
|
|
|
|
|
defer wg.Done()
|
|
|
|
|
|
|
|
result := int64(math.MaxInt64)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for seed := s; seed < s+r; seed++ {
|
|
|
|
d1 := srcToDest(seed, seedToSoil)
|
|
|
|
d1 := srcToDest(seed, seedToSoil)
|
|
|
|
d2 := srcToDest(d1, soilToFert)
|
|
|
|
d2 := srcToDest(d1, soilToFert)
|
|
|
|
d3 := srcToDest(d2, fertToWater)
|
|
|
|
d3 := srcToDest(d2, fertToWater)
|
|
|
|
@ -105,7 +111,20 @@ func FindRangedClosestLocation(lines []string) int64 {
|
|
|
|
result = d7
|
|
|
|
result = d7
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fmt.Println("seed roots done:", count)
|
|
|
|
|
|
|
|
|
|
|
|
fmt.Println("seed roots done:", result)
|
|
|
|
|
|
|
|
ch <- result
|
|
|
|
|
|
|
|
}(seeds[i], seeds[i+1])
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
wg.Wait()
|
|
|
|
|
|
|
|
close(ch)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
result := int64(math.MaxInt64)
|
|
|
|
|
|
|
|
for i := range ch {
|
|
|
|
|
|
|
|
if i < result {
|
|
|
|
|
|
|
|
result = i
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
return result
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|