Teaser 3016: Eureka
From The Sunday Times, 12th July 2020 [link] [link]
Archimedes’ Principle states that the upward force on a floating body equals the weight of water displaced by the body. In testing this, Liam floated a toy boat in a cylindrical drum of water. The boat had vertical sides and took up one tenth of the surface area of the water. He also had some identical ball bearings (enough to fit snugly across the diameter of the drum), which were made of a metal whose density is a single-figure number times that of water.
Liam loaded the boat with the ball bearings and noted the water level on the side of the drum. When he took the ball bearings out of the boat and dropped them in the water, the water level changed by an amount equal to the radius of a ball bearing.
How many ball bearings did Liam have?
This puzzle was not included in the book The Sunday Times Teasers Book 1 (2021).
[teaser3016]
Jim Randell 6:26 pm on 10 July 2020 Permalink |
Suppose there are n ball-bearings, each with a radius of r, then the radius of the cylindrical tank is nr.
If we take the water level in the tank when the the unladen boat is floating in it to be “low water”, then when the balls are placed in the tank they displace an amount of water equal to their volume: n (4/3) 𝛑 r³.
The boat still has the same draught, so the water level in the tank increases by:
[Note that the following step is flawed (although appears to be what the setter expects), see my follow-on comment below].
When the balls are instead placed in the boat, then the weight of the boat is increased by: kn(4/3)𝛑r³ (where the metal of the balls is k times the density of water), and so this weight of water is displaced, so the level of water in the tank (above low water) is:
(the relative density of water is 1).
The difference between these water levels is r:
Only one value of k = 1..9 has (10k − 9) divisible by 27.
This Python program looks for values of k that give an integer value for n:
from enigma import (irange, div, printf) for k in irange(1, 9): n = div(40 * k - 36, 27) if n is None: continue printf("k={k} n={n}")Solution: There are 12 ball bearings.
And density of the ball bearings is 9 times that of water. So perhaps they are mostly made of copper (relative density = 8.96).
Writing:
We see that k must be a multiple of 9, and as it must be a single digit the only possibility is k = 9, and so n = 12.
[This seems to be the expected answer, but see my follow on comment for a more realistic approach].
LikeLike
Jim Randell 9:22 am on 14 July 2020 Permalink |
In my original treatment, when the water was displaced from loading the boat, it was then added back in to the space around the boat. But unless the water is actually removed, and the boat drops anchor before the displaced water is added back in, the boat will rise as the water is added (we can think of the displaced water being added to the bottom of the tank, rather than the top). So the second water level calculated above is higher than it would be in “real life”.
The correct calculation is:
(The cross-sectional area of the boat is immaterial, as the boat rises with the water).
We then calculate the difference in water levels:
So, n is a multiple of 4, and (k − 1) is a multiple of 3:
For a single digit value of k there are two solutions (although k = 7 would be a more likely relative density for ball bearings [link], so the most reasonable solution would be that there are 8 ball bearings).
But the relative cross-sectional areas of the boat and the tank don’t seem to matter, so perhaps the setter was expecting the same approach as that I originally gave above.
LikeLike
Jim Randell 10:09 am on 25 March 2023 Permalink |
The published solution is:
LikeLike
GeoffR 9:02 am on 14 July 2020 Permalink |
I did a Python programme for a range of ball bearing sizes and the result (as expected) was a constant number of ball bearings. The programme confirmed the difference in water height was the radius of the ball bearing in each case.
from math import pi # Let rho be density factor of ball bearings c.f. water # Let N = number of ball bearings # ball bearing radius range considered is from 0.25 cm to 2.0 cm for r in (0.25, 0.5, 1.0, 1.5, 2.0): for rho in range(1, 10): for N in range(1, 50): # calculate radius of tank, area of tank and boat tank_rad = N * r tank_area = round((pi * tank_rad**2), 3) boat_area = round((tank_area / 10), 3) # calculate weight and volume of N ball bearings wt = rho * 4/3 * pi * r**3 * N vol = 4/3 * pi * r**3 * N # Let h1 be water height change after balls put in tank h1 = round((vol / tank_area), 3) # Let h2 = water height change after balls put in boat h2 = round ((wt / (tank_area - boat_area)), 3) # check radius of ball bearings = change in water height if r == h2 - h1: print(f"Ball Bearing Radius = {r} cm. Number of balls = {N} no.") print(f"1st height = {h1} cm., 2nd height = {h2} cm., Difference = {h2-h1} cm") print() # Ball Bearing Radius = 0.25 cm. Number of balls = 12 no. # 1st height = 0.028 cm., 2nd height = 0.278 cm., Difference = 0.25 cm # Ball Bearing Radius = 0.5 cm. Number of balls = 12 no. # 1st height = 0.056 cm., 2nd height = 0.556 cm., Difference = 0.5 cm # Ball Bearing Radius = 1 cm. Number of balls = 12 no. # 1st height = 0.111 cm., 2nd height = 1.111 cm., Difference = 1.0 cm # Ball Bearing Radius = 1.5 cm. Number of balls = 12 no. # 1st height = 0.167 cm., 2nd height = 1.667 cm., Difference = 1.5 cm # Ball Bearing Radius = 2 cm. Number of balls = 12 no. # 1st height = 0.222 cm., 2nd height = 2.222 cm., Difference = 2.0 cmLikeLike
Dilwyn Jones 11:02 am on 17 July 2020 Permalink |
I agree with the corrected calculation and a set of possible answers. I wondered if there is an additional constraint – the cross sectional area of a ball bearing must be smaller than the area of the boat, but that is true for all the answers. Then I wondered if all the ball bearings must touch the flat bottom of the boat, which means there must be at least 10 of them ignoring the spaces in between. If instead each bearing fills a square of side 2r, there must be at least 13. However I am speculating, as this information is not given in the problem.
LikeLike
Jim Randell 2:37 pm on 18 July 2020 Permalink |
I hadn’t given a great deal of thought to the shape of the boat, as I’d reasoned that if the boat was vertical tube with a hole down the middle to stack the balls into, then as long as n² ≥ 10 we could create a boat with the appropriate cross-sectional area. And this is true for all proposed values of n. Although there might be a problem with stability with this design of boat.
However we know the balls will fit exactly across the diameter of the tank, so if we throw a convex hull around the balls (which would have to be infinitely thin for it to work), then we get a boat that holds all the balls in a line, and it has the added advantage that the boat would be unable to tip over.
Then the cross-sectional area of the boat as a ratio of the cross-sectional area of the tank is:
Which has the following values:
Which gets us close to the 10% stipulation at n = 12.
The same idea, but stacking the balls two rows high gives a boat that will actually fit in the tank (but may tip over):
So with n=8 we can make a boat with a non-zero thickness hull around a cargo hold that can take the balls in a line stacked 2 high.
LikeLike