65 lines
		
	
	
	
		
			992 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
	
		
			992 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"bufio"
 | 
						|
	"fmt"
 | 
						|
	"os"
 | 
						|
	"strconv"
 | 
						|
)
 | 
						|
 | 
						|
func min(a, b int) int {
 | 
						|
	if a < b {
 | 
						|
		return a
 | 
						|
	} else {
 | 
						|
		return b
 | 
						|
	}
 | 
						|
}
 | 
						|
func abs(a int) int {
 | 
						|
	if a > 0 {
 | 
						|
		return a
 | 
						|
	} else {
 | 
						|
		return -a
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func splitOnCommas(data []byte, atEOF bool) (advance int, token []byte, err error) {
 | 
						|
	var ch byte
 | 
						|
	for advance, ch = range data {
 | 
						|
		if ch < '0' || ch > '9' {
 | 
						|
			break
 | 
						|
		}
 | 
						|
	}
 | 
						|
	if advance > 0 {
 | 
						|
		token = data[0:advance]
 | 
						|
		advance++ // skip the comma
 | 
						|
	}
 | 
						|
	return
 | 
						|
}
 | 
						|
 | 
						|
func main() {
 | 
						|
	positions := make([]int, 0)
 | 
						|
 | 
						|
	s := bufio.NewScanner(os.Stdin)
 | 
						|
	s.Split(splitOnCommas)
 | 
						|
	for s.Scan() {
 | 
						|
		n, _ := strconv.Atoi(s.Text())
 | 
						|
		positions = append(positions, n)
 | 
						|
	}
 | 
						|
 | 
						|
	sum := 0
 | 
						|
	for _, i := range positions {
 | 
						|
		sum += i
 | 
						|
	}
 | 
						|
	mean := sum / len(positions)
 | 
						|
 | 
						|
	// doing a mean with integers sucks
 | 
						|
	total := 0
 | 
						|
	total2 := 0
 | 
						|
	for _, i := range positions {
 | 
						|
		diff := abs(i - mean)
 | 
						|
		total += diff * (diff + 1) / 2
 | 
						|
		diff = abs(i - mean - 1)
 | 
						|
		total2 += diff * (diff + 1) / 2
 | 
						|
	}
 | 
						|
	fmt.Println(min(total, total2))
 | 
						|
}
 |