mirror of
https://github.com/SebastianStork/advent-of-code.git
synced 2026-01-21 14:31:34 +01:00
Solve 2024 day 1 in go
This commit is contained in:
parent
d27f5aa016
commit
9968e63c63
4 changed files with 1077 additions and 0 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1,2 +1,3 @@
|
||||||
**/build/
|
**/build/
|
||||||
*.pro.user*
|
*.pro.user*
|
||||||
|
.idea/
|
||||||
|
|
|
||||||
3
2024/go/day-01/go.mod
Normal file
3
2024/go/day-01/go.mod
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
module day-01
|
||||||
|
|
||||||
|
go 1.23
|
||||||
1000
2024/go/day-01/input
Normal file
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
73
2024/go/day-01/main.go
Normal 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))
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue