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