diff options
| author | Mike Vink <mike1994vink@gmail.com> | 2023-02-26 18:06:19 +0100 |
|---|---|---|
| committer | Mike Vink <mike1994vink@gmail.com> | 2023-02-26 18:06:19 +0100 |
| commit | 92e0fe693cdca3b15fb3c0e9b97738fdac0df8ba (patch) | |
| tree | a3df65d32b8a6c481751e4010c4354f0e98f6f17 | |
| parent | 2a0875cf1f0b726678831cf9e8951b3363f4578d (diff) | |
fixup
| -rw-r--r-- | 2022/01/calories/elfs.go (renamed from 2022/01/elfs.go) | 33 | ||||
| -rw-r--r-- | 2022/01/main.go | 26 | ||||
| -rw-r--r-- | cmd/aocli/gen.go | 42 |
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 }, } |
