-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
106 lines (90 loc) · 2.26 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
package main
import (
"adventofcode-2020/day1"
"adventofcode-2020/day10"
"adventofcode-2020/day11"
"adventofcode-2020/day12"
"adventofcode-2020/day13"
"adventofcode-2020/day14"
"adventofcode-2020/day15"
"adventofcode-2020/day16"
"adventofcode-2020/day2"
"adventofcode-2020/day3"
"adventofcode-2020/day4"
"adventofcode-2020/day5"
"adventofcode-2020/day6"
"adventofcode-2020/day7"
"adventofcode-2020/day8"
"adventofcode-2020/day9"
"flag"
"fmt"
"os"
)
func main() {
dayNumber := flag.Int("day", 0, "Day of adventofcode: 1-31")
partNumber := flag.Int("part", 0, "Part of the day: 1 or 2")
flag.Parse()
answer, err := getAnswerForPart(*dayNumber, *partNumber)
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
fmt.Printf("The answer is %s\n", answer)
}
func getAnswerForPart(dayNumber int, partNumber int) (string, error) {
getAnswer, err := getPart(dayNumber, partNumber)
if err != nil {
return "", err
}
return getAnswer(), nil
}
func getPart(dayNumber int, partNumber int) (func() string, error) {
part1, part2, err := getDay(dayNumber)
if err != nil {
return nil, err
}
if partNumber == 1 {
return part1, nil
}
if partNumber == 2 {
return part2, nil
}
return nil, fmt.Errorf("%d is not a valid part of the day. Try 1 or 2.", dayNumber)
}
func getDay(dayNumber int) (func() string, func() string, error) {
switch dayNumber {
case 1:
return day1.Part1, day1.Part2, nil
case 2:
return day2.Part1, day2.Part2, nil
case 3:
return day3.Part1, day3.Part2, nil
case 4:
return day4.Part1, day4.Part2, nil
case 5:
return day5.Part1, day5.Part2, nil
case 6:
return day6.Part1, day6.Part2, nil
case 7:
return day7.Part1, day7.Part2, nil
case 8:
return day8.Part1, day8.Part2, nil
case 9:
return day9.Part1, day9.Part2, nil
case 10:
return day10.Part1, day10.Part2, nil
case 11:
return day11.Part1, day11.Part2, nil
case 12:
return day12.Part1, day12.Part2, nil
case 13:
return day13.Part1, day13.Part2, nil
case 14:
return day14.Part1, day14.Part2, nil
case 15:
return day15.Part1, day15.Part2, nil
case 16:
return day16.Part1, day16.Part2, nil
}
return nil, nil, fmt.Errorf("%d is not a valid day number. It's either not a December date (1-31) or I have no solution for that day yet.", dayNumber)
}