diff --git a/2021/new/main.go b/2021/new/main.go new file mode 100644 index 0000000..c705a6a --- /dev/null +++ b/2021/new/main.go @@ -0,0 +1,72 @@ +package main + +import ( + _ "embed" + "fmt" + "os" + "path/filepath" + "strconv" + "text/template" +) + +//go:embed main.tmpl +var content string + +type Data struct{ N int } + +func main() { + if err := Main(); err != nil { + fmt.Fprintln(os.Stderr, err.Error()) + os.Exit(1) + } +} + +func Main() error { + t, err := template.New("main").Parse(content) + if err != nil { + return err + } + + n, err := strconv.Atoi(os.Args[1]) + if err != nil { + return err + } + + dir := fmt.Sprintf("day%d", n) + if err := os.MkdirAll(dir, 0o755); err != nil { + return err + } + + main := filepath.Join(dir, "main.go") + if err := writeMain(t, Data{N: n}, main); err != nil { + return err + } + + input := filepath.Join("input", fmt.Sprintf("day%d.txt", n)) + if err := touch(input); err != nil { + return err + } + return nil +} + +func writeMain(t *template.Template, data Data, path string) error { + f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0o644) + if err != nil { + return err + } + // Prefer the write error over the close error. + werr := t.Execute(f, data) + cerr := f.Close() + if werr != nil { + return werr + } + return cerr +} + +func touch(path string) error { + f, err := os.Create(path) + if err != nil { + return err + } + return f.Close() +} diff --git a/2021/new/main.tmpl b/2021/new/main.tmpl new file mode 100644 index 0000000..2683610 --- /dev/null +++ b/2021/new/main.tmpl @@ -0,0 +1,16 @@ +package main + +import ( + "fmt" + + "github.com/jdkaplan/advent-of-code/aoc" +) + +func main() { + lines := aoc.Input().ReadLines("day{{ .N }}.txt") + fmt.Println(part1(lines)) +} + +func part1(lines []string) int { + return 0 +}