Skip to content

Commit

Permalink
Refactor basic framework
Browse files Browse the repository at this point in the history
  • Loading branch information
jansabbe committed Dec 2, 2023
1 parent 278c439 commit d004183
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 49 deletions.
31 changes: 6 additions & 25 deletions cmd/day1/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,13 @@ package main

import (
"aoc2023/internal/day1"
"fmt"
"log"
"os"
"aoc2023/internal/puzzle"
)

func main() {
file, err := os.Open("day1.txt")
if err != nil {
log.Fatalf("Could not open file: %v", err)
}
defer file.Close()

part1, err := day1.CalculatePart1(file)
if err != nil {
log.Fatalf("Could not calculate part 1 because %v", err)
}

if _, err := file.Seek(0, 0); err != nil {
log.Fatalf("Could not seek to beginning of file, %v", err)
}

part2, err := day1.CalculatePart2(file)
if err != nil {
log.Fatalf("Could not calculate part 2 because %v", err)
}

fmt.Printf("Day 1, part 1: %d\n", part1)
fmt.Printf("Day 1, part 2: %d\n", part2)
puzzle.Solve(puzzle.Opts{
Filename: "day1.txt",
Part1: puzzle.IntSolverFunc(day1.CalculatePart1),
Part2: puzzle.IntSolverFunc(day1.CalculatePart2),
})
}
30 changes: 6 additions & 24 deletions cmd/day2/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,13 @@ package main

import (
"aoc2023/internal/day2"
"fmt"
"log"
"os"
"aoc2023/internal/puzzle"
)

func main() {
file, err := os.Open("day2.txt")
if err != nil {
log.Fatalf("Could not open file: %v", err)
}
defer file.Close()

part1, err := day2.SumPossibleGames(file)
if err != nil {
log.Fatalf("Could not calculate part 1 because %v", err)
}

if _, err := file.Seek(0, 0); err != nil {
log.Fatalf("Could not seek to beginning of file, %v", err)
}
part2, err := day2.CubeMinimumGame(file)
if err != nil {
log.Fatalf("Could not calculate part 2 because %v", err)
}

fmt.Printf("Day 2, part 1: %d\n", part1)
fmt.Printf("Day 2, part 2: %d\n", part2)
puzzle.Solve(puzzle.Opts{
Filename: "day2.txt",
Part1: puzzle.IntSolverFunc(day2.SumPossibleGames),
Part2: puzzle.IntSolverFunc(day2.CubeMinimumGame),
})
}
44 changes: 44 additions & 0 deletions internal/puzzle/puzzle.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package puzzle

import (
"fmt"
"log"
"os"
)

type Opts struct {
Filename string
Part1 Solver
Part2 Solver
}

func Solve(puzzle Opts) {
file, err := os.Open(puzzle.Filename)
if err != nil {
log.Fatalf("Could not open file: %v", err)
}
defer file.Close()

if puzzle.Part1 == nil {
return
}

part1, err := puzzle.Part1.Solve(file)
if err != nil {
log.Fatalf("Could not calculate part 1 because %v", err)
}
fmt.Printf("Part 1: %s\n", part1)

if _, err := file.Seek(0, 0); err != nil {
log.Fatalf("Could not seek to beginning of file, %v", err)
}

if puzzle.Part2 == nil {
return
}
part2, err := puzzle.Part2.Solve(file)
if err != nil {
log.Fatalf("Could not calculate part 2 because %v", err)
}
fmt.Printf("Part 2: %s\n", part2)
}
23 changes: 23 additions & 0 deletions internal/puzzle/solver.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package puzzle

import (
"io"
"strconv"
)

type Solver interface {
Solve(reader io.Reader) (string, error)
}

type SolverFunc func(reader io.Reader) (string, error)

func (r SolverFunc) Solve(reader io.Reader) (string, error) {
return r(reader)
}

type IntSolverFunc func(reader io.Reader) (int, error)

func (r IntSolverFunc) Solve(reader io.Reader) (string, error) {
solve, err := r(reader)
return strconv.Itoa(solve), err
}

0 comments on commit d004183

Please sign in to comment.