From 19d312c0fb638252c93fb50c77d1cd2d2f5af583 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Wed, 8 Dec 2021 15:48:36 +0100 Subject: Added solutions for 7th day --- 2021/07/first.go | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 2021/07/first.go (limited to '2021/07/first.go') diff --git a/2021/07/first.go b/2021/07/first.go new file mode 100644 index 0000000..c4692ec --- /dev/null +++ b/2021/07/first.go @@ -0,0 +1,57 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "sort" + "strconv" +) + +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) + } + + sort.Ints(positions) + medianPosition := len(positions) / 2 + median := 0 + if len(positions)%2 == 0 { + median = positions[medianPosition] + } else { + median = (positions[medianPosition] + positions[medianPosition+1]) / 2 + } + + total := 0 + for _, i := range positions { + total += abs(i - median) + } + fmt.Println(total) +} -- cgit v1.2.3