70 lines
1.0 KiB
Go
70 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"sort"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func main() {
|
|
|
|
lines := parse()
|
|
|
|
var left = []int{}
|
|
var right = []int{}
|
|
|
|
for _, line := range lines {
|
|
nums := strings.Fields(line)
|
|
|
|
l, _ := strconv.Atoi(nums[0])
|
|
r, _ := strconv.Atoi(nums[1])
|
|
left = append(left, l)
|
|
right = append(right, r)
|
|
|
|
}
|
|
|
|
sort.Ints(left)
|
|
sort.Ints(right)
|
|
|
|
var sum = 0
|
|
|
|
for i := 0; i < len(left); i++ {
|
|
var diff = right[i] - left[i]
|
|
if diff < 0 {
|
|
diff *= -1
|
|
}
|
|
sum += diff
|
|
}
|
|
|
|
var similarity = 0
|
|
|
|
for i := 0; i < len(left); i++ {
|
|
var count = 0
|
|
for j := 0; j < len(right); j++ {
|
|
if left[i] == right[j] {
|
|
count += 1
|
|
}
|
|
}
|
|
similarity += count * left[i]
|
|
}
|
|
fmt.Println(sum)
|
|
fmt.Println(similarity)
|
|
|
|
}
|
|
|
|
func parse() []string {
|
|
filePath := os.Args[1]
|
|
data, _ := os.ReadFile(filePath)
|
|
chunks := strings.Split(string(data), "\n")
|
|
var nonEmpthyChunks = []string{}
|
|
|
|
for _, chunk := range chunks {
|
|
if chunk != "" {
|
|
nonEmpthyChunks = append(nonEmpthyChunks, chunk)
|
|
}
|
|
}
|
|
return nonEmpthyChunks
|
|
}
|