You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.1 KiB
69 lines
1.1 KiB
12 months ago
|
package main
|
||
|
|
||
|
import (
|
||
|
"flag"
|
||
|
"fmt"
|
||
|
"io"
|
||
|
"log"
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
"strconv"
|
||
|
)
|
||
|
|
||
|
type puzzle interface {
|
||
|
solve(r io.Reader) string
|
||
|
}
|
||
|
|
||
|
var (
|
||
|
// pick which day to run with a flag
|
||
|
day = flag.String("d", "", "which day to solve")
|
||
|
|
||
|
// slice of all puzzles
|
||
|
puzzles = []puzzle{
|
||
|
&day01{},
|
||
|
}
|
||
|
)
|
||
|
|
||
|
func init() {
|
||
|
flag.Parse()
|
||
|
|
||
|
}
|
||
|
|
||
|
func inputs(day int64) []io.Reader {
|
||
|
inputs := make([]io.Reader, 0, 2)
|
||
|
path := fmt.Sprintf("input/%d-[1-2]", day)
|
||
|
|
||
|
matches, err := filepath.Glob(path)
|
||
|
if err != nil {
|
||
|
log.Fatalf("matching puzzle input files: %s", err.Error())
|
||
|
}
|
||
|
|
||
|
fmt.Println(matches)
|
||
|
|
||
|
for _, match := range matches {
|
||
|
f, err := os.Open(match)
|
||
|
if err == nil {
|
||
|
inputs = append(inputs, f)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return inputs
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
puzzleIndex, err := strconv.ParseInt(*day, 10, 32)
|
||
|
if err != nil {
|
||
|
log.Fatalf("invalid puzzle day: %s", *day)
|
||
|
}
|
||
|
inputs := inputs(puzzleIndex)
|
||
|
|
||
|
puzzle := puzzles[puzzleIndex-1]
|
||
|
|
||
|
fmt.Fprintf(os.Stdout, "Day %d:\n", puzzleIndex)
|
||
|
for i := range inputs {
|
||
|
ans := puzzle.solve(inputs[i])
|
||
|
fmt.Fprintf(os.Stdout, "Solution %d:\n%s", i+1, ans)
|
||
|
}
|
||
|
fmt.Fprintln(os.Stdout)
|
||
|
}
|