07b
This commit is contained in:
@ -17,13 +17,32 @@ struct Day07: Runnable {
|
||||
.trimmingCharacters(in: .newlines)
|
||||
.components(separatedBy: ",")
|
||||
.map { Int($0)! }
|
||||
run(horizontalPositions: horizontalPositions)
|
||||
runA(horizontalPositions: horizontalPositions)
|
||||
runB(horizontalPositions: horizontalPositions)
|
||||
}
|
||||
|
||||
func run(horizontalPositions: [Int]) {
|
||||
func runA(horizontalPositions: [Int]) {
|
||||
let median = horizontalPositions.sorted()[horizontalPositions.count / 2]
|
||||
let distancesToMedian = horizontalPositions.map { abs(median - $0) }
|
||||
let toalFuel = distancesToMedian.reduce(0,+)
|
||||
print(toalFuel)
|
||||
}
|
||||
|
||||
func runB(horizontalPositions: [Int]) {
|
||||
let average = Double(horizontalPositions.reduce(0, +)) / Double(horizontalPositions.count)
|
||||
let roundedDown = Int(floor(average))
|
||||
let roundedUp = Int(ceil(average))
|
||||
let fuelForRoundedDown = fuelConsumptionFor(horizontalPositions: horizontalPositions, toPosition: roundedDown)
|
||||
let fuelForRoundedUp = fuelConsumptionFor(horizontalPositions: horizontalPositions, toPosition: roundedUp)
|
||||
print(min(fuelForRoundedDown, fuelForRoundedUp))
|
||||
}
|
||||
|
||||
func fuelConsumptionFor(horizontalPositions: [Int], toPosition targetPos: Int) -> Int {
|
||||
horizontalPositions.map { fuelConsumptionFor(numSteps: abs(targetPos - $0)) }.reduce(0,+)
|
||||
}
|
||||
|
||||
func fuelConsumptionFor(numSteps: Int) -> Int {
|
||||
let dv = Double(numSteps)
|
||||
return Int((pow(dv, 2) + dv) / 2.0)
|
||||
}
|
||||
}
|
||||
|
@ -8,4 +8,5 @@
|
||||
import Foundation
|
||||
import Runner
|
||||
|
||||
Runner(target: Day07.self, day: "07", isTest: true).run()
|
||||
Runner(target: Day07.self, day: "07", isTest: false).run()
|
||||
|
Reference in New Issue
Block a user