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) }