summaryrefslogtreecommitdiff
path: root/2022/01
diff options
context:
space:
mode:
Diffstat (limited to '2022/01')
-rw-r--r--2022/01/calories/elfs.go (renamed from 2022/01/elfs.go)33
-rw-r--r--2022/01/main.go26
2 files changed, 35 insertions, 24 deletions
diff --git a/2022/01/elfs.go b/2022/01/calories/elfs.go
index b13dbd3..2011fc8 100644
--- a/2022/01/elfs.go
+++ b/2022/01/calories/elfs.go
@@ -1,4 +1,35 @@
-package main
+package calories
+
+import (
+ "context"
+ "strconv"
+)
+
+type solver func(ctx context.Context, data []int) ([]int, error)
+
+var (
+ Reader = readCaloriesInts
+ Solvers = []solver{partOne, partTwo}
+)
+
+func partOne(ctx context.Context, data []int) ([]int, error) {
+ return biggestElf(data), nil
+}
+
+func partTwo(ctx context.Context, data []int) ([]int, error) {
+ return []int{sum(biggestElf(data))}, nil
+}
+
+func readCaloriesInts(line string) (int, error) {
+ if len(line) == 0 {
+ return -1, nil
+ }
+ if i, err := strconv.Atoi(line); err != nil {
+ return 0, err
+ } else {
+ return i, nil
+ }
+}
func biggestElf(data []int) []int {
topThree := make([]int, 3)
diff --git a/2022/01/main.go b/2022/01/main.go
index 3b8ac4c..51d5750 100644
--- a/2022/01/main.go
+++ b/2022/01/main.go
@@ -2,38 +2,18 @@ package main
import (
"context"
- "strconv"
+ "mvinkio.online/aoc/2022/01/calories"
"mvinkio.online/aoc/aoc"
)
-func readCaloriesInts(line string) (int, error) {
- if len(line) == 0 {
- return -1, nil
- }
- if i, err := strconv.Atoi(line); err != nil {
- return 0, err
- } else {
- return i, nil
- }
-}
-
-func PartOne(ctx context.Context, data []int) ([]int, error) {
- return biggestElf(data), nil
-}
-
-func PartTwo(ctx context.Context, data []int) ([]int, error) {
- return []int{sum(biggestElf(data))}, nil
-}
-
// Boilerplate
func main() {
aoc.RunDay(
context.TODO(),
aoc.NewScanCloser("2022/01/input.txt"),
- aoc.ReadByLine(readCaloriesInts),
- PartOne,
- PartTwo,
+ aoc.ReadByLine(calories.Reader),
+ calories.Solvers...,
)
}