55 lines
1.1 KiB
Go
55 lines
1.1 KiB
Go
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
|
|
}
|