summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2022/01/calories/elfs.go (renamed from 2022/01/elfs.go)33
-rw-r--r--2022/01/main.go26
-rw-r--r--cmd/aocli/gen.go42
3 files changed, 74 insertions, 27 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...,
)
}
diff --git a/cmd/aocli/gen.go b/cmd/aocli/gen.go
index c8251a6..7320894 100644
--- a/cmd/aocli/gen.go
+++ b/cmd/aocli/gen.go
@@ -2,14 +2,50 @@ package main
import (
"fmt"
+ "strconv"
+ "strings"
"github.com/spf13/cobra"
)
+var templateStr string = `
+`
+
var genCmd = &cobra.Command{
Use: "gen",
- Short: "Generate a new key pair",
- Run: func(cmd *cobra.Command, args []string) {
- fmt.Println(args)
+ Short: "Generate a new boilerplate entrypoint for a day of Advent of Code",
+ RunE: func(cmd *cobra.Command, args []string) error {
+ year, day := "", ""
+ if len(args) == 1 {
+ parts := strings.SplitN(args[0], "/", 2)
+ if len(parts) == 2 {
+ year = parts[0]
+ day = parts[1]
+ }
+ } else {
+ return fmt.Errorf("Expected one argument in format %q", "<year>/<day>")
+ }
+
+ if year == "" || day == "" {
+ return fmt.Errorf("Expected one argument in format %q", "<year>/<day>")
+ }
+
+ _, err := strconv.Atoi(year)
+ if err != nil {
+ return fmt.Errorf("Couldn't parse year integer: %q", year)
+ }
+
+ dayInt, err := strconv.Atoi(day)
+ if err != nil {
+ return fmt.Errorf("Couldn't parse day integer: %q", day)
+ }
+
+ if dayInt < 1 || dayInt > 25 {
+ return fmt.Errorf("Day must be between 1 and 25, got %d", dayInt)
+ }
+
+ dayStr := fmt.Sprintf("%02d", dayInt)
+ fmt.Println(dayStr)
+ return nil
},
}