-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
82 lines (74 loc) · 2.06 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
package main
import (
"fmt"
"flag"
"time"
"log"
"errors"
"internal/solvers"
)
var day uint
var part uint
var inputSource string
func main() {
parseArguments()
solver, err := getSolverByName(fmt.Sprintf("Day%dSolver", day))
if err != nil {
log.Fatalln(err)
}
if part == 0 || part == 1 {
fmt.Println(fmt.Sprintf("Day %v, Part 1:", day))
fmt.Println(solver.Part1())
}
if part == 0 || part == 2 {
fmt.Println(fmt.Sprintf("Day %v, Part 2:", day))
fmt.Println(solver.Part2())
}
}
func parseArguments() {
flag.UintVar(&day, "day", 0, "Explicitly set the day to be solved")
flag.UintVar(&part, "part", 0, "defaults to 0 (both)")
flag.StringVar(&inputSource, "source", "day", "selects what input file prefix to load, defaults to \"day\"")
flag.Parse()
if day < 1 {
// Use the current day of the month if none is specified.
// Works great during december
day = uint(time.Now().Day())
}
}
func getSolverByName(name string) (solvers.DaySolver, error) {
// Compiled languages like go have no other options than
// explicitly listing all Types that may be used, it seems
var solver solvers.DaySolver = nil
if name == "Day1Solver" {
solver = &solvers.Day1Solver{Day: day, InputSource: inputSource}
}
if name == "Day2Solver" {
solver = &solvers.Day2Solver{Day: day, InputSource: inputSource}
}
if name == "Day3Solver" {
solver = &solvers.Day3Solver{Day: day, InputSource: inputSource}
}
if name == "Day6Solver" {
solver = &solvers.Day6Solver{Day: day, InputSource: inputSource}
}
if name == "Day7Solver" {
solver = &solvers.Day7Solver{Day: day, InputSource: inputSource}
}
if name == "Day9Solver" {
solver = &solvers.Day9Solver{Day: day, InputSource: inputSource}
}
if name == "Day11Solver" {
solver = &solvers.Day11Solver{Day: day, InputSource: inputSource}
}
if name == "Day14Solver" {
solver = &solvers.Day14Solver{Day: day, InputSource: inputSource}
}
if name == "Day22Solver" {
solver = &solvers.Day22Solver{Day: day, InputSource: inputSource}
}
if solver == nil {
return nil, errors.New("Unknown Solver")
}
return solver, nil
}