-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
133 lines (121 loc) Β· 4.54 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package main
import (
"fmt"
"io"
"net/http"
"github.com/alecthomas/kong"
day01 "github.com/johncalvinroberts/advent-of-code-2022/day/01"
day02 "github.com/johncalvinroberts/advent-of-code-2022/day/02"
day03 "github.com/johncalvinroberts/advent-of-code-2022/day/03"
day04 "github.com/johncalvinroberts/advent-of-code-2022/day/04"
day05 "github.com/johncalvinroberts/advent-of-code-2022/day/05"
day06 "github.com/johncalvinroberts/advent-of-code-2022/day/06"
day07 "github.com/johncalvinroberts/advent-of-code-2022/day/07"
day08 "github.com/johncalvinroberts/advent-of-code-2022/day/08"
day09 "github.com/johncalvinroberts/advent-of-code-2022/day/09"
day10 "github.com/johncalvinroberts/advent-of-code-2022/day/10"
day11 "github.com/johncalvinroberts/advent-of-code-2022/day/11"
day12 "github.com/johncalvinroberts/advent-of-code-2022/day/12"
"github.com/johncalvinroberts/advent-of-code-2022/utils"
)
var Advent struct {
Scaffold ScaffoldCmd `cmd:"" help:"Scaffold an AOC challenge."`
Run RunCmd `cmd:"" help:"Run an AOC challenge."`
}
type RunCmd struct {
Day int `help:"Which day do you want to run?"`
}
func (cmd *RunCmd) Run() error {
if cmd.Day != 0 {
fmt.Printf("π² Running day %02d\n", cmd.Day)
} else {
fmt.Println("π
Running all challenges!!")
}
switch cmd.Day {
case 0:
// TODO: run all challenges
case 1:
fmt.Printf("part 1: %d\n", day01.Part1(utils.ReadDayFile(cmd.Day)))
fmt.Printf("part 2: %d\n", day01.Part2(utils.ReadDayFile(cmd.Day)))
case 2:
fmt.Printf("part 1: %d\n", day02.Part1(utils.ReadDayFile(cmd.Day)))
fmt.Printf("part 2: %d\n", day02.Part2(utils.ReadDayFile(cmd.Day)))
case 3:
fmt.Printf("part 1: %d\n", day03.Part1(utils.ReadDayFile(cmd.Day)))
fmt.Printf("part 2: %d\n", day03.Part2(utils.ReadDayFile(cmd.Day)))
case 4:
fmt.Printf("part 1: %d\n", day04.Part1(utils.ReadDayFile(cmd.Day)))
fmt.Printf("part 2: %d\n", day04.Part2(utils.ReadDayFile(cmd.Day)))
case 5:
fmt.Printf("part 1: %s\n", day05.Part1(utils.ReadDayFile(cmd.Day)))
fmt.Printf("part 2: %s\n", day05.Part2(utils.ReadDayFile(cmd.Day)))
case 6:
fmt.Printf("part 1: %d\n", day06.Part1(utils.ReadDayFile(cmd.Day)))
fmt.Printf("part 2: %d\n", day06.Part2(utils.ReadDayFile(cmd.Day)))
case 7:
fmt.Printf("part 1: %d\n", day07.Part1(utils.ReadDayFile(cmd.Day)))
fmt.Printf("part 2: %d\n", day07.Part2(utils.ReadDayFile(cmd.Day)))
case 8:
fmt.Printf("part 1: %d\n", day08.Part1(utils.ReadDayFile(cmd.Day)))
fmt.Printf("part 2: %d\n", day08.Part2(utils.ReadDayFile(cmd.Day)))
case 9:
fmt.Printf("part 1: %d\n", day09.Part1(utils.ReadDayFile(cmd.Day)))
fmt.Printf("part 2: %d\n", day09.Part2(utils.ReadDayFile(cmd.Day)))
case 10:
fmt.Printf("part 1: %d\n", day10.Part1(utils.ReadDayFile(cmd.Day)))
fmt.Printf("part 2: %s\n", day10.Part2(utils.ReadDayFile(cmd.Day)))
case 11:
fmt.Printf("part 1: %d\n", day11.Part1(utils.ReadDayFile(cmd.Day)))
fmt.Printf("part 2: %d\n", day11.Part2(utils.ReadDayFile(cmd.Day)))
case 12:
fmt.Printf("part 1: %d\n", day12.Part1(utils.ReadDayFile(cmd.Day)))
fmt.Printf("part 2: %d\n", day12.Part2(utils.ReadDayFile(cmd.Day)))
}
return nil
}
type ScaffoldCmd struct {
Day int `help:"Which day do you want to pull down?"`
}
func (cmd *ScaffoldCmd) Run() error {
fmt.Printf("π§ββοΈ scaffolding day %d\n", cmd.Day)
cookie := utils.ReadFile("cookie")
url := fmt.Sprintf("https://adventofcode.com/2022/day/%d/input", cmd.Day)
client := &http.Client{}
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("cookie", fmt.Sprintf("session=%s", cookie))
res, err := client.Do(req)
utils.PanicOnErr(err)
defer res.Body.Close()
data, err := io.ReadAll(res.Body)
utils.PanicOnErr(err)
var (
dirname = fmt.Sprintf("day/%02d", cmd.Day)
inputFile = fmt.Sprintf("%s/input.txt", dirname)
chlgFile = fmt.Sprintf("%s/challenge.go", dirname)
testFile = fmt.Sprintf("%s/challenge_test.go", dirname)
chlgScaffold = fmt.Sprintf(`package day_%02d
func Part1(input string) {}
func Part2(input string) {}
`, cmd.Day)
testScaffold = fmt.Sprintf(`package day_%02d
import "testing"
func TestPart1(t *testing.T) {
t.Error("Not Implemented")
}
func TestPart2(t *testing.T) {}
`, cmd.Day)
)
utils.MakeDir(dirname)
utils.WriteFile(inputFile, data)
utils.WriteFile(chlgFile, []byte(chlgScaffold))
utils.WriteFile(testFile, []byte(testScaffold))
fmt.Println("π²π²ε₯½δΊοΌDone! βοΈβοΈβοΈβοΈ")
return nil
}
func main() {
ctx := kong.Parse(&Advent,
kong.Description("πε£π
θ―π¦ζ π ADVENT of CODE 2022 βΏ
π²βΏ
"),
)
err := ctx.Run()
ctx.FatalIfErrorf(err)
}