1
2
3
4
5
6
7
8
9
positions = ARGF.read.split(?,).map(&:to_i)
min, max = positions.minmax
pos = (min..max).min_by {|i|
  # positions.sum {|p| (p - i).abs }
  positions.sum {|p| n = (p - i).abs; (n * (n + 1)) / 2 }
}

# p positions.sum {|p| (p - pos).abs }
p positions.sum {|p| n = (p - pos).abs; (n * (n + 1)) / 2 }