aboutsummaryrefslogtreecommitdiff
path: root/2021/07/first.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2021/07/first.go57
1 files changed, 57 insertions, 0 deletions
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)
+}