Revert "Merge branch 'develop' into dev/19"

This reverts commit 5247ae9d72, reversing
changes made to 9947a9b559.
This commit is contained in:
2022-06-21 01:18:05 -05:00
parent de07c7c987
commit 34ece5dd77
3 changed files with 22 additions and 43 deletions

View File

@ -104,10 +104,26 @@ func (d *Day14) Part1() string {
func (d *Day14) Part2() string {
oreAvailable := int64(1000000000000)
estimate := oreAvailable / d.getOreRequiredForFuel(1)
lastSuccess := u.Bisect(estimate, estimate*2, 1, func(val int64) bool {
oreConsumed := d.getOreRequiredForFuel(val)
return oreConsumed < oreAvailable
})
high := estimate * 2
low := estimate
lastSuccess := low
lastFailure := high
fuelProduced := low
for math.Abs(float64(lastFailure-lastSuccess)) > 1 {
oreConsumed := d.getOreRequiredForFuel(fuelProduced)
adjustment := (lastFailure - lastSuccess) / 2
if oreConsumed < oreAvailable {
lastSuccess = fuelProduced
} else {
lastFailure = fuelProduced
adjustment = -adjustment
}
fuelProduced += adjustment
}
return fmt.Sprintf("Maximum fuel we can make from 1 trillion ore: %s%d%s", u.TextBold, lastSuccess, u.TextReset)
}

View File

@ -1,31 +0,0 @@
package utilities
import "math"
// Bisect takes a known-good low and known-bad high value as the bounds
// to bisect, and a function to test each value for success or failure.
// If the function succeeds, the value is adjusted toward the maximum,
// and if the function fails, the value is adjusted toward the minimum.
// The final value is returned when the difference between the success
// and the failure is less than or equal to the acceptance threshold
// (usually 1, for integers).
func Bisect[T Number](low, high, threshold T, tryFunc func(val T) bool) T {
lastSuccess := low
lastFailure := high
currVal := low
for T(math.Abs(float64(lastFailure-lastSuccess))) > threshold {
success := tryFunc(currVal)
adjustment := (lastFailure - lastSuccess) / 2
if success {
lastSuccess = currVal
} else {
lastFailure = currVal
adjustment = -adjustment
}
currVal += adjustment
}
return currVal
}

View File

@ -128,15 +128,9 @@ func (p *IntcodeProgram) ensureMemoryCapacity(address int) {
}
func (p *IntcodeProgram) Reset() {
wiped := false
if len(p.memory) != len(p.program) {
wiped = true
p.memory = nil
}
p.memory = nil
p.init()
if !wiped {
copy(p.memory, p.program)
}
copy(p.memory, p.program)
p.relativeBase = 0
}