package main import ( "errors" "fmt" "io" "log" "slices" ) const ( MAX_LOOP = 1_000_000 ) func main() { left := make([]int, 0, 1024) right := make([]int, 0, 1024) var l, r int for i := 0; i < MAX_LOOP; i++ { n, err := fmt.Scan(&l, &r) if errors.Is(err, io.EOF) { break } if err != nil { log.Fatal("Unexpected error while reading input: ", err) } if n != 2 { log.Fatal(fmt.Sprintf("Unexpected number of fields at line %d of input", i+1)) } left = append(left, int(l)) right = append(right, int(r)) } fmt.Printf("distance = %d\n", distance(left, right)) } func distance(left, right []int) int { slices.Sort(left) slices.Sort(right) var sum int for i := 0; i < len(left); i++ { subSum := left[i] - right[i] if subSum < 0 { subSum *= -1 } sum += subSum } return sum }