]> fbox.kageds.com Git - adventofcode.git/blob - 2023/go/main.go
20223 day1
[adventofcode.git] / 2023 / go / main.go
1 package main
2
3 import (
4 "fmt"
5 // "math/rand"
6 "os"
7 // "strings"
8 // "time"
9 "adventofcode2023/utils"
10 "adventofcode2023/day01"
11 )
12 // Usage: go run main.go <NN>
13 // assumes input is in day<NN>/input.txt
14 func main() {
15 d := day()
16 fmt.Printf("Running day %02d\n", d)
17
18 switch d {
19 case 1:
20 fmt.Printf("part 1: %d\n", day01.Part1(utils.Readfile(d)))
21 fmt.Printf("part 2: %d\n", day01.Part2(utils.Readfile(d)))
22 default:
23 panic(fmt.Errorf("no such day: %d", d))
24 }
25 }
26
27 // Reads day from os.Args.
28 func day() int {
29 latest := 0
30 if len(os.Args) == 1 {
31 return latest
32 }
33
34 if os.Args[1] == "next" {
35 genNext(latest + 1)
36 os.Exit(0)
37 }
38 day := utils.MustAtoi(os.Args[1])
39 return day
40 }
41
42
43 func genNext(n int) {
44 os.Mkdir(fmt.Sprintf("day%02d", n), 0755)
45 f, err := os.Create(fmt.Sprintf("day%02d/day%02d.go", n, n))
46 utils.PanicOnErr(err)
47 defer f.Close()
48 f.WriteString(fmt.Sprintf(`package day%02d
49
50 func Part1(input string) int {
51 return 0
52 }
53
54 func Part2(input string) int {
55 return 0
56 }
57 `, n))
58 fmt.Printf("wrote day%02d/day%02d.go\n", n, n)
59
60 f, err = os.Create(fmt.Sprintf("day%02d/day%02d_test.go", n, n))
61 utils.PanicOnErr(err)
62 defer f.Close()
63 f.WriteString(fmt.Sprintf(`package day%02d
64
65 import (
66 "testing"
67
68 "github.com/stretchr/testify/require"
69 )
70
71 func TestPart1(t *testing.T) {
72 r := Part1("")
73 require.Equal(t, 0, r)
74 }
75
76 func TestPart2(t *testing.T) {
77 r := Part2("")
78 require.Equal(t, 0, r)
79 }
80 `, n))
81 fmt.Printf("wrote day%02d/day%02d_test.go\n", n, n)
82
83 }