My kotlin solution.
import java.nio.file.Files import java.nio.file.Paths import kotlin.math.max private const val FILENAME = "src/main/resources/day01.txt" fun fuelNeeded(mass: Int) = max((mass / 3) - 2, 0) fun totalFuelNeeded(mass: Int): Int { var fuel = fuelNeeded(mass) var totalFuel = fuel while (fuel != 0) { fuel = fuelNeeded(fuel) totalFuel += fuel } return totalFuel } fun part1() = Files.readAllLines(Paths.get(FILENAME)) .sumBy { fuelNeeded(it.toInt()) } .toString() fun part2() = Files.readAllLines(Paths.get(FILENAME)) .sumBy { totalFuelNeeded(it.toInt()) } .toString() fun main() { println("Part 1: ${part1()}") println("Part 2: ${part2()}") }
I'm going to clean this up to avoid imperative style and post it as a reply to this comment.
github.com/jbristow/adventofcode/t...
This part 2 solution is much more elegant, and leverages monads.
tailrec fun totalFuelNeeded(mass: Int, fuel: Option<Int> = Option.empty(), totalFuel: Int = 0): Int = when (val nextFuel = fuel.fold({ fuelNeeded(mass) }, ::fuelNeeded)) { 0 -> totalFuel else -> totalFuelNeeded(mass, nextFuel.just(), totalFuel + nextFuel) }
I didn't even think about using a max function - that would have been so much cleaner than making two functions!
max
I love cleaning these up into more elegant forms almost as much as I love just getting the solution banged out!
Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink.
Hide child comments as well
Confirm
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
My kotlin solution.
I'm going to clean this up to avoid imperative style and post it as a reply to this comment.
github.com/jbristow/adventofcode/t...
This part 2 solution is much more elegant, and leverages monads.
I didn't even think about using a
max
function - that would have been so much cleaner than making two functions!I love cleaning these up into more elegant forms almost as much as I love just getting the solution banged out!