55 lines
952 B
Go
55 lines
952 B
Go
package day20
|
|
|
|
import (
|
|
"math"
|
|
"tools"
|
|
)
|
|
|
|
func Part1(puzzle tools.AoCPuzzle) interface{} {
|
|
target := puzzle.GetInputArrayInt()[0]
|
|
|
|
presents := 0
|
|
houseNumber := 0
|
|
for presents < target {
|
|
houseNumber++
|
|
divisor := tools.NewSet()
|
|
for i := 1; i <= int(math.Sqrt(float64(houseNumber))); i++ {
|
|
if houseNumber%i == 0 {
|
|
divisor.Add(i)
|
|
divisor.Add(houseNumber / i)
|
|
}
|
|
}
|
|
presents = 0
|
|
for v := range divisor {
|
|
presents += v.(int) * 10
|
|
}
|
|
}
|
|
|
|
return houseNumber
|
|
}
|
|
|
|
func Part2(puzzle tools.AoCPuzzle) interface{} {
|
|
target := puzzle.GetInputArrayInt()[0]
|
|
|
|
presents := 0
|
|
houseNumber := 0
|
|
for presents < target {
|
|
houseNumber++
|
|
divisor := tools.NewSet()
|
|
|
|
for i := 1; i <= int(math.Sqrt(float64(houseNumber))); i++ {
|
|
if houseNumber%i == 0 {
|
|
divisor.Add(houseNumber / i)
|
|
}
|
|
}
|
|
presents = 0
|
|
for v := range divisor {
|
|
if houseNumber/v.(int) < 50 {
|
|
presents += v.(int) * 11
|
|
}
|
|
}
|
|
}
|
|
|
|
return houseNumber
|
|
}
|