# Enigmatic Code

Programming Enigma Puzzles

## Enigma 1294: Think of an animal

From New Scientist #2452, 19th June 2004 [link]

My young Australian nephew is getting good at arithmetic, and is gradually learning the names of a good number of animals. So I set him the following puzzle:

Think of a number, multiply it by 7, add 35, divide by 7, then take away the number you first thought of. Letting 1=A, 2=B, 3=C and so on, work out which letter your answer represents. Now think of an animal beginning with that letter.

In advance I had written “elephant” on a piece of card to amaze him. However, after thinking of a number he then performed the next four numerical steps in the wrong order, getting a positive whole number at each stage. He then worked out which letter his answer represented. However, he was unable to think of an animal beginning with that letter.

What number did he first think of, and what letter did he end up with?

Note: I am waiting for a phone line to be connected at my new house, so I only have sporadic access to the internet at the moment. The current estimate is that the line will be connected at the end of September 2014.

[enigma1294]

### One response to “Enigma 1294: Think of an animal”

1. Jim Randell 12 September 2014 at 12:37 pm

This Python program runs in 38ms.

```from itertools import permutations
from enigma import irange, printf

# the operations...

# multiply by 7
def op1(n, m):
return n * 7

def op2(n, m):
return n + 35

# divide by 7
def op3(n, m):
(n, r) = divmod(n, 7)
if r > 0: raise ValueError()
return n

# take away the number you first thought of
def op4(n, m):
n -= m
if n < 1: raise ValueError()
return n

# function composition
def compose(n, m, fns):
for fn in fns:
n = fn(n, m)
return n

# choose an order for the operations
for ops in permutations((op1, op2, op3, op4)):
# ignore the correct order
if ops == (op1, op2, op3, op4): continue

for m in irange(1, 26):
# perform the operations
try:
n = compose(m, m, ops)
except ValueError:
continue

if not(0 < n < 27): continue
letter = chr(64 + n)

printf("{m} [{ops}] => {n} \"{letter}\"", ops=' '.join(x.__name__ for x in ops))
```

Solution: He started with 14 and ended up with the letter “Q”.

There are only three options:

7 ⇒ “K”
14 ⇒ “Q”
21 ⇒ “W”

These can be achieved by:

× 7 → + 35 → – m → ÷ 7
× 7 → – m → + 35 → ÷ 7

Since the nephew is Australian we can assume that he knows of the Kangaroo/Koala/Kookaburra and Wombat/Wallaby, but perhaps not the Quokka/Quoll, leaving “Q” as the remaining option.

This site uses Akismet to reduce spam. Learn how your comment data is processed.