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