Watch
1
0
Fork
You've already forked advent-of-code
0

2021: new from template

This commit is contained in:
Jeremy Kaplan 2021-12-04 22:45:22 -08:00
commit 18285b0bf1
2 changed files with 88 additions and 0 deletions

72
2021/new/main.go Normal file
View file

@ -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()
}

16
2021/new/main.tmpl Normal file
View file

@ -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
}