A shape's volume is the measure of how much three-dimensional space that shape occupies.


Given six integers: [L,W,H] as length, width and height of one container and [l,w,h] as length, width and height of some random item.

You will need to calculate how many items would fit completely if the item was a liquid/fluid... and subtract how many items would also fit completely if the item was solid.

Note: Rotating the solid shape to fit empty space is required.

The input can be read from stdin, taken from args, can also be one or two lists/arrays, or any other valid way, but you can take in only six integers.

And the output should be one integer number: the difference.

Whole program or function are accepted.

Since this is shortest code in bytes wins!

Sample Input/Output

1) L=3  W=2  H=2  l=1  w=1  h=2
-> for item as liquid : 6 items fit completely
-> for item as solid  : 6 items fit completely
output: 0

2) L=1  W=8  H=3  l=3  w=4  h=2
-> for item as liquid : 1 item fit completely
-> for item as solid  : no items fit completely
output: 1

3) L=3  W=4  H=3  l=2  w=2  h=2
-> for item as liquid : 4 items fit completely
-> for item as solid  : 2 items fit completely
output: 2

4) L=6  W=6  H=6  l=1  w=5  h=6
-> for item as liquid : 7 items fit completely
-> for item as solid  : 7 items fit completely
output: 0


Just for illustration of how the solid items could fit:

Sample #3

enter image description here

Sample #4

enter image description here

  • \$\begingroup\$ Do we have to consider rotations of the items? \$\endgroup\$ Mar 9, 2016 at 4:46
  • 2
    \$\begingroup\$ The solid version effectively has things like en.wikipedia.org/wiki/… as a subproblem. So even ignoring the golfing getting this correct at all is potentially VERY hard. See also en.wikipedia.org/wiki/Cutting_stock_problem \$\endgroup\$
    – Ton Hospel
    Mar 9, 2016 at 13:40
  • 1
    \$\begingroup\$ Do you mean that each of the smaller solids (that, I suppose, are aproximated as cuboids) may be rotated independently to achieve optimal ocupancy of the larger solid? If so, it seems like a formidable math problem by itself. \$\endgroup\$
    – dnep
    Mar 9, 2016 at 14:12
  • 2
    \$\begingroup\$ Ok, with out of alignment rotations allowed too I don't even see a way to do an exponential complexity exhaustive search anymore \$\endgroup\$
    – Ton Hospel
    Mar 9, 2016 at 18:01
  • 1
    \$\begingroup\$ @feersum Wow, this is wicked! \$\endgroup\$
    – dnep
    Mar 10, 2016 at 14:40

1 Answer 1


Python 2.7 - 659 548 373 355 bytes

My first golf, but still very golfable.

The rotation thing didn't make it as easy as expected though.

import numpy as n
for i in range(q):
 for a,b,c in p(L,W,H):
  for k in o:
    for x,y,z in p(k[0],k[1],k[2]):
     if d[a+x][b+y][c+z]:raise
print q-s

But still a nice little brainteaser :D

**Edit: My colleague and I pondered a little more, and we found some more optimization potential

**Saved 18 byte thanks to CatsAreFluffy



  • \$\begingroup\$ Welcome to Programming Puzzles & Code Golf! Answers to code-golf challenges are required to be at least trivially golfed. You already used singler letter variables, which is good, but you should also remove unnecessary whitespaces between operators. Also you can write multiple statements in one line if you seperate them with a ; which saves you the newlines and the potential intendation whitespaces. \$\endgroup\$
    – Denker
    Mar 9, 2016 at 12:18
  • \$\begingroup\$ Also you only need to output one integer. There is no need to add text to it, this only increases your byte count for no reason. \$\endgroup\$
    – Denker
    Mar 9, 2016 at 12:31
  • \$\begingroup\$ Ty DenkerAffe, the edits saved some bytes :D \$\endgroup\$
    – Kijata
    Mar 9, 2016 at 12:35
  • 1
    \$\begingroup\$ You can save a few bytes by defining a new range() and product() function as a one-letter function like so: r=range and p=product. You can now call range() as just r() and product() as just p()! This is a pretty good tip for built-in functions that are used many times throughout a golf. \$\endgroup\$
    – MrPublic
    Mar 9, 2016 at 12:38
  • 1
    \$\begingroup\$ Something like this. \$\endgroup\$
    – ASCII-only
    Mar 9, 2016 at 13:34

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.