Day01
This commit is contained in:
54
2024/gareth/day01/day01.go
Normal file
54
2024/gareth/day01/day01.go
Normal file
@@ -0,0 +1,54 @@
|
||||
package day01
|
||||
|
||||
import (
|
||||
"math"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func Part1(input string) int {
|
||||
var leftList, rightList []float64
|
||||
total := 0.0
|
||||
lines := strings.Split(input, "\n")
|
||||
for _, line := range lines {
|
||||
sides := strings.Fields(line)
|
||||
leftNum, _ := strconv.ParseFloat(sides[0], 64)
|
||||
rightNum, _ := strconv.ParseFloat(sides[1], 64)
|
||||
leftList = append(leftList, leftNum)
|
||||
rightList = append(rightList, rightNum)
|
||||
}
|
||||
|
||||
sort.Float64s(leftList)
|
||||
sort.Float64s(rightList)
|
||||
|
||||
for i := 0; i < len(leftList); i++ {
|
||||
total += math.Abs(leftList[i] - rightList[i])
|
||||
}
|
||||
return int(total)
|
||||
}
|
||||
|
||||
func Part2(input string) int {
|
||||
var leftList, rightList []int
|
||||
|
||||
lines := strings.Split(input, "\n")
|
||||
for _, line := range lines {
|
||||
sides := strings.Fields(line)
|
||||
leftNum, _ := strconv.Atoi(sides[0])
|
||||
rightNum, _ := strconv.Atoi(sides[1])
|
||||
leftList = append(leftList, leftNum)
|
||||
rightList = append(rightList, rightNum)
|
||||
}
|
||||
|
||||
counts := make(map[int]int)
|
||||
for _, num := range rightList {
|
||||
counts[num]++
|
||||
}
|
||||
|
||||
similarityScore := 0
|
||||
for _, num := range leftList {
|
||||
similarityScore += num * counts[num]
|
||||
}
|
||||
|
||||
return similarityScore
|
||||
}
|
||||
Reference in New Issue
Block a user