Teaser 3241: Users pay
From The Sunday Times, 3rd November 2024 [link] [link]
I live in a cul-de-sac which had planning permission for building on ten identical plots along the whole length of one side of the road. The developer started building, and numbered the properties, from the closed end. The plots aren’t all finished, and the cost of surfacing the whole road has to be paid by the owners of the completed properties. It was decided that the owners would only contribute to the cost of the road leading to their property, so the owner of number 1 pays for the road section in front of their property, the cost of the section outside number 2 is shared equally between numbers 1 and 2, and so on.
My contribution is £ 1,000, while that of another homeowner is £ 3,800.
What is my house number and how many houses have been built?
[teaser3241]
Hugo 7:18 am on 3 November 2024 Permalink |
This doesn’t appear to make sense. If the houses are numbered from the closed end, one would expect the owner of no. 1 to have to pay the highest contribution, since he is furthest from the point of access to the road.
LikeLike
Jim Randell 8:16 am on 3 November 2024 Permalink |
I think the way it works is as follows:
If 3 houses were built, then:
So house #1 pays the most, then #2 and then #3, and the entire cost of the road is covered.
LikeLike
Jim Randell 7:52 am on 3 November 2024 Permalink |
It took me a couple of attempts to work out how this puzzle is meant to work. I assumed the houses are built in numerical order starting at #1.
This Python program runs in 70ms. (Internal runtime is 537µs).
from enigma import (Rational, irange, subsets, printf) Q = Rational() # consider total number of houses built for n in irange(1, 10): # accumulate total cost (in sections) for each house cost = dict((i, 0) for i in irange(1, n)) # allocate costs for each section for k in irange(1, 10): m = min(k, n) for i in irange(1, m): cost[i] += Q(1, m) # look for one cost which is 3.8x another for (a, b) in subsets(sorted(cost.keys()), size=2): if 10 * cost[a] == 38 * cost[b]: printf("n={n} -> a={a} b={b}")Solution: 8 houses have been built. The setters house is #7.
The cost of the ten sections of road is distributed among the 8 houses as follows:
The setter (at house #7) pays £1000, so the actual costs are:
So it is the occupant of house #2 who has to pay £ 3800.
And the total cost of the road is £ 19310.35.
LikeLike