Solve 2024 day 1 in go

This commit is contained in:
SebastianStork 2025-01-06 21:09:57 +01:00
parent d27f5aa016
commit 9968e63c63
4 changed files with 1077 additions and 0 deletions

3
2024/go/day-01/go.mod Normal file
View file

@ -0,0 +1,3 @@
module day-01
go 1.23

1000
2024/go/day-01/input Normal file

File diff suppressed because it is too large Load diff

73
2024/go/day-01/main.go Normal file
View file

@ -0,0 +1,73 @@
package main
import (
"fmt"
"log"
"os"
"sort"
"strconv"
"strings"
)
func readInput() (leftList, rightList []int, err error) {
content, err := os.ReadFile("input")
if err != nil {
return
}
lines := strings.Split(strings.TrimSpace(string(content)), "\n")
for _, line := range lines {
parts := strings.Fields(line)
leftNum, _ := strconv.Atoi(parts[0]) // ignore error because input is always correct
rightNum, _ := strconv.Atoi(parts[1])
leftList = append(leftList, leftNum)
rightList = append(rightList, rightNum)
}
sort.Ints(leftList)
sort.Ints(rightList)
return
}
func totalDistance(leftList, rightList []int) (totalDistance int) {
for i := range leftList {
difference := leftList[i] - rightList[i]
if difference < 0 {
difference = -difference
}
totalDistance += difference
}
return
}
func similarityScore(leftList, rightList []int) (similarityScore int) {
rightMap := make(map[int]int)
for _, number := range rightList {
rightMap[number]++
}
for _, number := range leftList {
similarityScore += number * rightMap[number]
}
return
}
func main() {
leftList, rightList, err := readInput()
if err != nil {
log.Fatalln(err)
}
// Part one
fmt.Println("Total distance:", totalDistance(leftList, rightList))
// Part two
fmt.Println("Similarity Score:", similarityScore(leftList, rightList))
}