diff --git a/problems/maximum-units-on-a-truck.kt b/problems/maximum-units-on-a-truck.kt new file mode 100644 index 0000000..4c61be9 --- /dev/null +++ b/problems/maximum-units-on-a-truck.kt @@ -0,0 +1,19 @@ +class Solution { + data class BoxType(val boxes: Int, val units: Int) + fun toBoxType(x: IntArray): BoxType = BoxType(x[0], x[1]) + + fun maximumUnits(boxTypes: Array, truckSize: Int): Int = + boxTypes + .map { toBoxType(it) } + .sortedByDescending(BoxType::units) + .fold(0 to 0) { acc, boxType -> + if (acc.first < truckSize) { + val count = minOf(truckSize - acc.first, boxType.boxes) + + (acc.first + count) to (acc.second + count * boxType.units) + } else { + acc + } + } + .second +}