]> fbox.kageds.com Git - adventofcode.git/blob - 2022/go/main.go
c92f46b96e685163fd45237634d9ffa6b0183f11
[adventofcode.git] / 2022 / go / main.go
1 package main
2
3 import (
4 "fmt"
5 // "math/rand"
6 "os"
7 // "strings"
8 // "time"
9
10 "adventofcode2022/utils"
11 "adventofcode2022/day01"
12 "adventofcode2022/day02"
13 "adventofcode2022/day03"
14 "adventofcode2022/day04"
15 "adventofcode2022/day05"
16 "adventofcode2022/day06"
17 "adventofcode2022/day07"
18 "adventofcode2022/day08"
19 "adventofcode2022/day09"
20 "adventofcode2022/day10"
21
22 )
23
24 // Usage: go run main.go <NN>
25 // assumes input is in day<NN>/input.txt
26 func main() {
27 d := day()
28 fmt.Printf("Running day %02d\n", d)
29
30 switch d {
31 case 1:
32 fmt.Printf("part 1: %d\n", day01.Part1(utils.Readfile(d)))
33 fmt.Printf("part 2: %d\n", day01.Part2(utils.Readfile(d)))
34 case 2:
35 fmt.Printf("part 1: %d\n", day02.Part1(utils.Readfile(d)))
36 fmt.Printf("part 2: %d\n", day02.Part2(utils.Readfile(d)))
37 case 3:
38 fmt.Printf("part 1: %d\n", day03.Part1(utils.Readfile(d)))
39 fmt.Printf("part 2: %d\n", day03.Part2(utils.Readfile(d)))
40 case 4:
41 fmt.Printf("part 1: %d\n", day04.Part1(utils.Readfile(d)))
42 fmt.Printf("part 2: %d\n", day04.Part2(utils.Readfile(d)))
43 case 5:
44 fmt.Printf("part 1: %s\n", day05.Part1(utils.Readfile(d)))
45 fmt.Printf("part 2: %s\n", day05.Part2(utils.Readfile(d)))
46 case 6:
47 fmt.Printf("part 1: %d\n", day06.Part1(utils.Readfile(d)))
48 fmt.Printf("part 2: %d\n", day06.Part2(utils.Readfile(d)))
49 case 7:
50 fmt.Printf("part 1: %d\n", day07.Part1(utils.Readfile(d)))
51 fmt.Printf("part 2: %d\n", day07.Part2(utils.Readfile(d)))
52 case 8:
53 fmt.Printf("part 1: %d\n", day08.Part1(utils.Readfile(d)))
54 fmt.Printf("part 2: %d\n", day08.Part2(utils.Readfile(d)))
55 case 9:
56 fmt.Printf("part 1: %d\n", day09.Part1(utils.Readfile(d)))
57 fmt.Printf("part 2: %d\n", day09.Part2(utils.Readfile(d)))
58 case 10:
59 fmt.Printf("part 1: %d\n", day10.Part1(utils.Readfile(d)))
60 fmt.Printf("part 2: %s\n", day10.Part2(utils.Readfile(d)))
61 default:
62 panic(fmt.Errorf("no such day: %d", d))
63 }
64 }
65
66 // Reads day from os.Args.
67 func day() int {
68 latest := 9
69 if len(os.Args) == 1 {
70 return latest
71 }
72
73 if os.Args[1] == "next" {
74 genNext(latest + 1)
75 os.Exit(0)
76 }
77 day := utils.MustAtoi(os.Args[1])
78 return day
79 }
80
81
82 func genNext(n int) {
83 os.Mkdir(fmt.Sprintf("day%02d", n), 0755)
84 f, err := os.Create(fmt.Sprintf("day%02d/day%02d.go", n, n))
85 utils.PanicOnErr(err)
86 defer f.Close()
87 f.WriteString(fmt.Sprintf(`package day%02d
88
89 func Part1(input string) int {
90 return 0
91 }
92
93 func Part2(input string) int {
94 return 0
95 }
96 `, n))
97 fmt.Printf("wrote day%02d/day%02d.go\n", n, n)
98
99 f, err = os.Create(fmt.Sprintf("day%02d/day%02d_test.go", n, n))
100 utils.PanicOnErr(err)
101 defer f.Close()
102 f.WriteString(fmt.Sprintf(`package day%02d
103
104 import (
105 "testing"
106
107 "github.com/stretchr/testify/require"
108 )
109
110 func TestPart1(t *testing.T) {
111 r := Part1("")
112 require.Equal(t, 0, r)
113 }
114
115 func TestPart2(t *testing.T) {
116 r := Part2("")
117 require.Equal(t, 0, r)
118 }
119 `, n))
120 fmt.Printf("wrote day%02d/day%02d_test.go\n", n, n)
121
122 }