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