main.go 827 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package main
  2. import (
  3. "errors"
  4. "fmt"
  5. "io"
  6. "log"
  7. "slices"
  8. )
  9. const (
  10. MAX_LOOP = 1_000_000
  11. )
  12. func main() {
  13. left := make([]int, 0, 1024)
  14. right := make([]int, 0, 1024)
  15. var l, r int
  16. for i := 0; i < MAX_LOOP; i++ {
  17. n, err := fmt.Scan(&l, &r)
  18. if errors.Is(err, io.EOF) {
  19. break
  20. }
  21. if err != nil {
  22. log.Fatal("Unexpected error while reading input: ", err)
  23. }
  24. if n != 2 {
  25. log.Fatal(fmt.Sprintf("Unexpected number of fields at line %d of input", i+1))
  26. }
  27. left = append(left, int(l))
  28. right = append(right, int(r))
  29. }
  30. fmt.Printf("distance = %d\n", distance(left, right))
  31. }
  32. func distance(left, right []int) int {
  33. slices.Sort(left)
  34. slices.Sort(right)
  35. var sum int
  36. for i := 0; i < len(left); i++ {
  37. subSum := left[i] - right[i]
  38. if subSum < 0 {
  39. subSum *= -1
  40. }
  41. sum += subSum
  42. }
  43. return sum
  44. }