adventofcode/2024/day01/main.go

78 lines
1.4 KiB
Go

package main
import (
"fmt"
"slices"
"strconv"
"strings"
helpers "git.bullercodeworks.com/brian/adventofcode/helpers"
)
func main() {
inp := helpers.StdinToStringSlice()
part1(inp)
part2(inp)
}
func buildLists(inp []string) ([]int, []int) {
var list1, list2 []int
for i := range inp {
var pt string
for j := range inp[i] {
if inp[i][j] != ' ' {
pt = pt + string(inp[i][j])
} else if strings.TrimSpace(pt) != "" {
wrk, err := strconv.Atoi(pt)
if err != nil {
panic(err)
}
list1 = append(list1, wrk)
pt = ""
}
}
// End of line
wrk, err := strconv.Atoi(pt)
if err != nil {
panic(err)
}
list2 = append(list2, wrk)
pt = ""
}
return list1, list2
}
func part1(inp []string) {
var diffs []int
list1, list2 := buildLists(inp)
slices.Sort(list1)
slices.Sort(list2)
for i := 0; i < len(list1); i++ {
diffs = append(diffs, (list1[i] - list2[i]))
}
var total int
for i := range diffs {
if diffs[i] < 0 {
total = total - diffs[i]
} else {
total = total + diffs[i]
}
}
fmt.Println("# Part 1")
fmt.Println("Total Distance:", total)
}
func part2(inp []string) {
var score int
occ := make(map[int]int)
list1, list2 := buildLists(inp)
for i := range list2 {
occ[list2[i]]++
}
for i := range list1 {
score = score + (list1[i] * occ[list1[i]])
}
fmt.Println("# Part 2")
fmt.Println("Similarity Score:", score)
}