add day 1
This commit is contained in:
58
day1/compare_lists.go
Normal file
58
day1/compare_lists.go
Normal 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
1000
day1/data.txt
Normal file
File diff suppressed because it is too large
Load Diff
62
day1/similarity_score.go
Normal file
62
day1/similarity_score.go
Normal 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)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user