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