Files
adventofcode2024/01/main.go
2024-12-01 12:39:46 +01:00

68 lines
1.3 KiB
Go

package main
import (
"flag"
"fmt"
"math"
"os"
"regexp"
"sort"
"strconv"
)
var (
inputFile = flag.String("input", "input.txt", "input filename")
reLine = regexp.MustCompile(`(?m)^(\d+)\s+(\d+)$`)
)
func main() {
flag.Parse()
input, err := os.ReadFile(*inputFile)
if err != nil {
panic(err)
}
var leftList, rightList []int
for _, match := range reLine.FindAllStringSubmatch(string(input), -1) {
leftNumber, err := strconv.Atoi(match[1])
if err != nil {
panic(err)
}
rightNumber, err := strconv.Atoi(match[2])
if err != nil {
panic(err)
}
leftList = append(leftList, leftNumber)
rightList = append(rightList, rightNumber)
}
sort.SliceStable(leftList, func(i, j int) bool {
return leftList[i] < leftList[j]
})
sort.SliceStable(rightList, func(i, j int) bool {
return rightList[i] < rightList[j]
})
simMap := make(map[int]int)
totalDistance := 0
for i := 0; i < len(leftList); i++ {
for _, rightItem := range rightList {
if rightItem == leftList[i] {
simMap[leftList[i]]++
}
}
totalDistance += int(math.Abs(float64(leftList[i] - rightList[i])))
}
simScore := 0
for number, count := range simMap {
simScore += number * count
}
fmt.Printf("total distance: %d\n", totalDistance)
fmt.Printf("total sim score: %d\n", simScore)
}