diff options
author | Julien Dessaux | 2021-12-08 15:48:36 +0100 |
---|---|---|
committer | Julien Dessaux | 2021-12-08 15:48:36 +0100 |
commit | 19d312c0fb638252c93fb50c77d1cd2d2f5af583 (patch) | |
tree | 73fa35981d109eefe8005a42bf3dbb0b506d6f96 /2021/07/second.go | |
parent | Added solutions for 6th day (diff) | |
download | advent-of-code-19d312c0fb638252c93fb50c77d1cd2d2f5af583.tar.gz advent-of-code-19d312c0fb638252c93fb50c77d1cd2d2f5af583.tar.bz2 advent-of-code-19d312c0fb638252c93fb50c77d1cd2d2f5af583.zip |
Added solutions for 7th day
Diffstat (limited to '2021/07/second.go')
-rw-r--r-- | 2021/07/second.go | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/2021/07/second.go b/2021/07/second.go new file mode 100644 index 0000000..5133f66 --- /dev/null +++ b/2021/07/second.go @@ -0,0 +1,65 @@ +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)) +} |