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