diff --git a/bob_box_utils/bob_box_utils.go b/bob_box_utils/bob_box_utils.go new file mode 100644 index 0000000000000000000000000000000000000000..1fb51b9241839102854e91981ea581cf5ae7ca4c --- /dev/null +++ b/bob_box_utils/bob_box_utils.go @@ -0,0 +1,39 @@ +package bob_box_utils + +import "sort" + +type ParcelDimensions struct { + Height float64 `json:"height"` + Width float64 `json:"width"` + Length float64 `json:"length"` +} + +// GetStackedParcelDimensions sorts the parcels so and stacks them +func GetStackedParcelDimensions(parcels []ParcelDimensions) ParcelDimensions { + var totalParcelHeight, maxParcelWidth, maxParcelLength float64 + // Stack the parcels + for _, parcel := range parcels { + parcelHeight, parcelWidth, parcelLength := SortDimensionsInIncreasingOrder(parcel.Height, parcel.Width, parcel.Length) + + // To stack, sum all the heights + totalParcelHeight += parcelHeight + + // Get the max width + if parcelWidth > maxParcelWidth { + maxParcelWidth = parcelWidth + } + + //Get the max length + if parcelLength > maxParcelLength { + maxParcelLength = parcelLength + } + } + return ParcelDimensions{totalParcelHeight, maxParcelWidth, maxParcelLength} +} + +// SortDimensionsInIncreasingOrder sorts the given dimensions in increasing order +func SortDimensionsInIncreasingOrder(dim1, dim2, dim3 float64) (float64, float64, float64) { + dims := []float64{dim1, dim2, dim3} + sort.Float64s(dims) + return dims[0], dims[1], dims[2] +}