Skip to content

Commit

Permalink
refactor, feat: allow parameters to calc function
Browse files Browse the repository at this point in the history
  • Loading branch information
julijane committed Dec 20, 2024
1 parent 3a4476f commit 8ba99a5
Show file tree
Hide file tree
Showing 18 changed files with 57 additions and 55 deletions.
6 changes: 3 additions & 3 deletions aoc/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ import (
)

// InputCalcFunction is the function signature for the calculation function
type InputCalcFunction func(i *Input, runPart1, runpart2 bool) (any, any)
type InputCalcFunction func(i *Input, runPart1, runpart2 bool, param ...any) (any, any)

// Run runs the given calcFunction on the given input file
func Run(fileName string, calcFunction InputCalcFunction, runPart1, runPart2 bool) {
func Run(fileName string, calcFunction InputCalcFunction, runPart1, runPart2 bool, param ...any) {
_ = pp.Print // just to keep this module in the project

InputFile, err := os.Open(fileName)
Expand All @@ -33,7 +33,7 @@ func Run(fileName string, calcFunction InputCalcFunction, runPart1, runPart2 boo
lines = lines[:len(lines)-1]
}

res1, res2 := calcFunction(NewInput(lines), runPart1, runPart2)
res1, res2 := calcFunction(NewInput(lines), runPart1, runPart2, param)

result := fileName + ":"
if runPart1 {
Expand Down
2 changes: 1 addition & 1 deletion day01/day01.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ func part2(col1, col2 []int) int {
return sum
}

func calc(input *aoc.Input, _, _ bool) (any, any) {
func calc(input *aoc.Input, _, _ bool, _ ...any) (any, any) {
col1 := []int{}
col2 := []int{}

Expand Down
2 changes: 1 addition & 1 deletion day02/day02.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ lineLoop:
return sum
}

func calc(input *aoc.Input, _, _ bool) (any, any) {
func calc(input *aoc.Input, _, _ bool, _ ...any) (any, any) {
return check(input, false), check(input, true)
}

Expand Down
2 changes: 1 addition & 1 deletion day03/day03.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ func calcFor(code string, isPart2 bool) int {
return sum
}

func calc(input *aoc.Input, doPart1, doPart2 bool) (any, any) {
func calc(input *aoc.Input, doPart1, doPart2 bool, _ ...any) (any, any) {
sumPart1 := 0
sumPart2 := 0

Expand Down
2 changes: 1 addition & 1 deletion day04/day04.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func checkForStartPosPart2(grid *aoc.Grid, pos aoc.Coordinate) int {
return 0
}

func calc(input *aoc.Input, doPart1, doPart2 bool) (any, any) {
func calc(input *aoc.Input, _, _ bool, _ ...any) (any, any) {
sumPart1 := 0
sumPart2 := 0

Expand Down
2 changes: 1 addition & 1 deletion day05/day05.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ func doReorder(rules [][]int, pageList []int) {
})
}

func calc(input *aoc.Input, doPart1, doPart2 bool) (any, any) {
func calc(input *aoc.Input, _, _ bool, _ ...any) (any, any) {
sumPart1 := 0
sumPart2 := 0

Expand Down
2 changes: 1 addition & 1 deletion day06/day06.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ func doWalkPart2(grid *aoc.Grid, additionalObstacle, startPos aoc.Coordinate) bo
}
}

func calc(input *aoc.Input, doPart1, doPart2 bool) (any, any) {
func calc(input *aoc.Input, _, _ bool, _ ...any) (any, any) {
sumPart2 := 0

grid := input.Grid()
Expand Down
2 changes: 1 addition & 1 deletion day07/day07.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ func checkWithRecursion(targetSum int, numbers []int, canBePart1 bool) (bool, bo
return false, false
}

func calc(input *aoc.Input, doPart1, doPart2 bool) (any, any) {
func calc(input *aoc.Input, _, _ bool, _ ...any) (any, any) {
sumPart1 := 0
sumPart2 := 0

Expand Down
2 changes: 1 addition & 1 deletion day08/day08.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"github.com/julijane/advent-of-code-2024/aoc"
)

func calc(input *aoc.Input, doPart1, doPart2 bool) (any, any) {
func calc(input *aoc.Input, _, _ bool, _ ...any) (any, any) {
antennaLocations := make(map[byte][]aoc.Coordinate)

grid := input.Grid()
Expand Down
2 changes: 1 addition & 1 deletion day09/day09.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ func defrag(files []FileBlocks, gaps []FileBlocks) int {
return sum
}

func calc(input *aoc.Input, doPart1, doPart2 bool) (any, any) {
func calc(input *aoc.Input, _, _ bool, _ ...any) (any, any) {
line := input.PlainLines()[0]

gapsPart2 := []FileBlocks{}
Expand Down
2 changes: 1 addition & 1 deletion day10/day10.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ type TrailByStartpos map[aoc.Coordinate]TrailInfo

type TrailsByStartval map[byte]TrailByStartpos

func calc(input *aoc.Input, doPart1, doPart2 bool) (any, any) {
func calc(input *aoc.Input, _, _ bool, _ ...any) (any, any) {
grid := input.Grid()

trailsByStartval := make(TrailsByStartval)
Expand Down
2 changes: 1 addition & 1 deletion day11/day11.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ func calcForStoneAtLevel(stone StoneLevel, maxLevel int) int {
return result
}

func calc(input *aoc.Input, doPart1, doPart2 bool) (any, any) {
func calc(input *aoc.Input, _, _ bool, _ ...any) (any, any) {
stones := aoc.ExtractNumbers(input.PlainLines()[0])

sumPart1 := 0
Expand Down
2 changes: 1 addition & 1 deletion day12/day12.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ func walkFrom(g *aoc.Grid, c aoc.Coordinate, fieldVal byte, walkedFields map[aoc
return sumFields, sumPerimeterLength, sumCorners
}

func calc(input *aoc.Input, doPart1, doPart2 bool) (any, any) {
func calc(input *aoc.Input, _, _ bool, _ ...any) (any, any) {
sumPart1 := 0
sumPart2 := 0

Expand Down
2 changes: 1 addition & 1 deletion day13/day13.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func solveFor(aX, aY, bX, bY, pX, pY int) int {
return a*3 + b
}

func calc(input *aoc.Input, doPart1, doPart2 bool) (any, any) {
func calc(input *aoc.Input, _, _ bool, _ ...any) (any, any) {
sumPart1 := 0
sumPart2 := 0

Expand Down
74 changes: 38 additions & 36 deletions day14/day14.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,27 @@ import (
"github.com/julijane/advent-of-code-2024/aoc"
)

const (
gridWidth = 101
gridHeight = 103
)

type Robot struct {
StartPos aoc.Coordinate
Velocity aoc.Coordinate
}

func (r Robot) PositionAfter(seconds int) aoc.Coordinate {
func (r Robot) PositionAfter(seconds, gridWidth, gridHeight int) aoc.Coordinate {
return aoc.Coordinate{
X: (r.StartPos.X + r.Velocity.X*seconds) % gridWidth,
Y: (r.StartPos.Y + r.Velocity.Y*seconds) % gridHeight,
}
}

func calc(input *aoc.Input, doPart1, doPart2 bool) (any, any) {
func calc(input *aoc.Input, _, doPart2 bool, param ...any) (any, any) {
sumPart1 := 0
sumPart2 := 0

params := param[0].([]interface{})

gridWidth := params[0].(int)
gridHeight := params[1].(int)

robots := []Robot{}
for _, line := range input.PlainLines() {
values := aoc.ExtractNumbers(line)
Expand All @@ -44,7 +44,7 @@ func calc(input *aoc.Input, doPart1, doPart2 bool) (any, any) {
quadrantCount := [4]int{}

for _, robot := range robots {
finalPos := robot.PositionAfter(100)
finalPos := robot.PositionAfter(100, gridWidth, gridHeight)

if finalPos.X < gridWidth/2 {
if finalPos.Y < gridHeight/2 {
Expand All @@ -64,47 +64,49 @@ func calc(input *aoc.Input, doPart1, doPart2 bool) (any, any) {

sumPart1 = quadrantCount[0] * quadrantCount[1] * quadrantCount[2] * quadrantCount[3]

for {
sumPart2++
g := aoc.NewGrid(gridWidth, gridHeight, ' ')
for _, robot := range robots {
pos := robot.PositionAfter(sumPart2)
g.Set(pos, '#')
}
if doPart2 {
for {
sumPart2++
g := aoc.NewGrid(gridWidth, gridHeight, ' ')
for _, robot := range robots {
pos := robot.PositionAfter(sumPart2, gridWidth, gridHeight)
g.Set(pos, '#')
}

connected := 0
unconnected := 0
connected := 0
unconnected := 0

for y := 0; y < gridHeight; y++ {
xloop:
for x := 0; x < gridWidth; x++ {
pos := aoc.Coordinate{X: x, Y: y}
if g.Get(pos, '.') != '#' {
continue
}
for y := 0; y < gridHeight; y++ {
xloop:
for x := 0; x < gridWidth; x++ {
pos := aoc.Coordinate{X: x, Y: y}
if g.Get(pos, '.') != '#' {
continue
}

for dir := 0; dir < 4; dir++ {
if g.Get(pos.Add(aoc.DirsStraight[dir]), ' ') == '#' {
connected++
continue xloop
for dir := 0; dir < 4; dir++ {
if g.Get(pos.Add(aoc.DirsStraight[dir]), ' ') == '#' {
connected++
continue xloop
}
}

unconnected++
}
}

unconnected++
if float64(connected) > float64(connected+unconnected)*0.7 {
g.Print()
break
}
}

if float64(connected) > float64(connected+unconnected)*0.7 {
g.Print()
break
}

}

return sumPart1, sumPart2
}

func main() {
// aoc.Run("sample1.txt", calc, true, true)
aoc.Run("input.txt", calc, true, true)
aoc.Run("sample1.txt", calc, true, false, 11, 7)
aoc.Run("input.txt", calc, true, true, 101, 103)
}
2 changes: 1 addition & 1 deletion day15/day15.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ instLoop:
return result
}

func calc(input *aoc.Input, doPart1, doPart2 bool) (any, any) {
func calc(input *aoc.Input, doPart1, doPart2 bool, _ ...any) (any, any) {
blocks := input.TextBlocks()

instructions := []byte{}
Expand Down
2 changes: 1 addition & 1 deletion day16/day16.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ func (pq *PriorityQueue) Pop() any {

// ---

func calc(input *aoc.Input, doPart1, doPart2 bool) (any, any) {
func calc(input *aoc.Input, doPart1, doPart2 bool, _ ...any) (any, any) {
sumPart1 := math.MaxInt64
sumPart2 := 0

Expand Down
2 changes: 1 addition & 1 deletion day17/day17.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ type partialA struct {
numSections int
}

func calc(input *aoc.Input, doPart1, doPart2 bool) (any, any) {
func calc(input *aoc.Input, doPart1, doPart2 bool, _ ...any) (any, any) {
resultPart2 := 0

cpu := NewCPU(input)
Expand Down

0 comments on commit 8ba99a5

Please sign in to comment.