Enigmatic Code

Programming Enigma Puzzles

From New Scientist #1346, 24th February 1983 [link]

I gave four of our local Young Farmers the same number of standard hurdles and asked each of them to make a neat paddock which would require all his hurdles to fence it completely. All succeeded. All the paddocks turned out to have quite different dimensions. Edgar’s and Fred’s had the same area. Mervyn’s and Peter’s had the same area.

What was the smallest number of hurdles I could have given to each?

A neat paddock is a 6-sided paddock composed of 2 contiguous squares, like the one in the diagram, with each side fenced with an exact number of standard hurdles.

[enigma200]

One response to “Enigma 200: Neat paddocks”

1. Jim Randell 19 June 2014 at 9:27 am

This Python program runs in 37ms.

```from itertools import count
from collections import defaultdict
from enigma import printf

# for a neat paddock made out of squares of side a and b (a > b)
# we need 4a + 2b hurdles
#
# so for a=2, b=1 we need 10 hurdles

# consider increasing numbers of hurdles in the perimeter
for n in count(10, step=2):
# accumulate (a, b) pairs by area
d = defaultdict(list)
for b in count(1):
(a, r) = divmod(n - 2 * b, 4)
if not(b < a): break
if r > 0: continue
d[a ** 2 + b ** 2].append((a, b))
# count areas with multiple pairs, and find 4 values
if sum(len(ps) for ps in d.values() if len(ps) > 1) > 3:
printf("n={n} {d}", d=dict(d))
break
```

Solution: The smallest possible number of hurdles given to each farmer is 70.

One pair of farmers would each enclose an area of 250 sq hurdles (13 square + 9 square and 15 square + 5 square), the other pair would each enclose an area of 265 sq hurdles (12 square + 11 square and 16 square + 3 square).