Solve day one
This commit is contained in:
commit
9cac573ef0
2 changed files with 1081 additions and 0 deletions
81
one.go
Normal file
81
one.go
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"slices"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func check(e error) {
|
||||
if e != nil {
|
||||
panic(e)
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
f, err := os.Open("./one.txt")
|
||||
defer f.Close()
|
||||
check(err)
|
||||
|
||||
var list [2][]int
|
||||
list[0] = make([]int, 0, 10)
|
||||
list[1] = make([]int, 0, 10)
|
||||
|
||||
scanner := bufio.NewScanner(f)
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
fields := strings.Fields(line)
|
||||
|
||||
if len(fields) != 2 {
|
||||
fmt.Println(line)
|
||||
panic("Need exactly two ints per line")
|
||||
}
|
||||
|
||||
for i, field := range fields {
|
||||
int_field, err := strconv.Atoi(field)
|
||||
check(err)
|
||||
list[i] = append(list[i], int_field)
|
||||
}
|
||||
}
|
||||
|
||||
slices.Sort(list[0])
|
||||
slices.Sort(list[1])
|
||||
|
||||
n_vals := len(list[0])
|
||||
|
||||
sum_of_diffs := 0
|
||||
for i := 0; i < n_vals; i++ {
|
||||
var abs_diff int
|
||||
x := list[0][i]
|
||||
y := list[1][i]
|
||||
|
||||
if x < y {
|
||||
abs_diff = y - x
|
||||
} else {
|
||||
abs_diff = x - y
|
||||
}
|
||||
|
||||
sum_of_diffs += abs_diff
|
||||
}
|
||||
|
||||
fmt.Println(sum_of_diffs)
|
||||
|
||||
var numbers [2]map[int]int
|
||||
numbers[0] = make(map[int]int)
|
||||
numbers[1] = make(map[int]int)
|
||||
|
||||
for i := range list[0] {
|
||||
numbers[0][list[0][i]] += 1
|
||||
numbers[1][list[1][i]] += 1
|
||||
}
|
||||
|
||||
similarity_score := 0
|
||||
for number, n := range numbers[0] {
|
||||
similarity_score += number * numbers[1][number] * n
|
||||
}
|
||||
|
||||
fmt.Println(similarity_score)
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue