add day 1

This commit is contained in:
2024-12-02 09:36:23 +01:00
parent 279baeffc1
commit 7f9633dac0
3 changed files with 1120 additions and 0 deletions

58
day1/compare_lists.go Normal file
View File

@@ -0,0 +1,58 @@
package main
import (
"fmt"
"os"
"strings"
"strconv"
"sort"
)
func check(e error) {
if e != nil {
panic(e)
}
}
func abs(n int) int {
if n < 0 {
return -n
}
return n
}
func main() {
// read in file as lines
dat, err := os.ReadFile("data.txt")
check(err)
lines := strings.Split(string(dat), "\n")
// construct lists
left_list := []int{}
right_list := []int{}
for i := range len(lines) - 1 {
numbers := strings.Split(lines[i], " ")
left_num, err := strconv.Atoi(numbers[0])
check(err)
right_num, err := strconv.Atoi(numbers[1])
check(err)
left_list = append(left_list, left_num)
right_list = append(right_list, right_num)
}
// sort lists
sort.Ints(left_list)
sort.Ints(right_list)
// count difference
distance := 0
for i := range left_list {
distance += abs(left_list[i] - right_list[i])
}
fmt.Println(distance)
}

1000
day1/data.txt Normal file

File diff suppressed because it is too large Load Diff

62
day1/similarity_score.go Normal file
View File

@@ -0,0 +1,62 @@
package main
import (
"fmt"
"os"
"strings"
"strconv"
"sort"
)
func check(e error) {
if e != nil {
panic(e)
}
}
func count_sorted(list []int, elem int) int {
counter := 0
for i := range list {
if list[i] == elem {
counter++
} else if counter > 0 {
break
}
}
return counter
}
func main() {
// read in file as lines
dat, err := os.ReadFile("data.txt")
check(err)
lines := strings.Split(string(dat), "\n")
// construct lists
left_list := []int{}
right_list := []int{}
for i := range len(lines) - 1 {
numbers := strings.Split(lines[i], " ")
left_num, err := strconv.Atoi(numbers[0])
check(err)
right_num, err := strconv.Atoi(numbers[1])
check(err)
left_list = append(left_list, left_num)
right_list = append(right_list, right_num)
}
// sort right_list
sort.Ints(right_list)
// count similarity
score := 0
for i := range left_list {
score += left_list[i] * count_sorted(right_list, left_list[i])
}
fmt.Println(score)
}