82 lines
1.2 KiB
Go
82 lines
1.2 KiB
Go
|
|
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)
|
||
|
|
}
|