# Enigmatic Code

Programming Enigma Puzzles

## Enigma 1462: Coloured cubes

From New Scientist #2623, 29th September 2007

In the following statements different capital letters in bold stand for different digits, with the same letter consistently standing for the same digit.

I have a collection of cubes in three different colours: red, blue and yellow. Their sides are all whole numbers, and furthermore I can tell you that the volume of each red cube is NIL, the face of each blue cube has NO area and the volume of each yellow cube is ZERO. Obviously the total volume of all the cubes is NOTHING. As for quantities, if you arrange the cubes into three distinct piles according to colour, you will find that in one pile there are NO cubes and in another pile there are NONE.

How many cubes are in the remaining pile, and what is their colour?

[enigma1462]

### One response to “Enigma 1462: Coloured cubes”

1. Jim Randell 12 February 2013 at 9:24 am

This Python program runs in 40ms.

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

# make a dictionary mapping values to the result of a function
# applied to that value, as a string, where the string has no repeats
def data(f, i):
d = dict()
for x in i:
s = str(f(x))
if not is_duplicate(s): d[x] = s
return d

# two digit squares
s3 = data(lambda x: x ** 2, irange(4, 9))

# three and four digit cubes
c3 = data(lambda x: x ** 3, irange(5, 9))
c4 = data(lambda x: x ** 3, irange(10, 21))

# blue cubes have faces with area NO
for (b, NO) in s3.items():
# red cubes have volume NIL
for (r, NIL) in (c for c in c3.items() if c == NO):
# yellow cubes have volume ZERO
for (y, ZERO) in (c for c in c4.items() if c[-1] == NO):
# remaining digits
ds = set('0123456789').difference(NIL, ZERO)
# there should be 3 remaining digits
if len(ds) != 3: continue
# and these are (in some order) T, H, G
for (T, H, G) in permutations(ds):
NOTHING = int(NO + T + H + NIL[1::-1] + G)
NONE = int(NO + NO + ZERO)
# consider the three piles (the colours in some order)
colour = { b: 'blue', r: 'red', y: 'yellow' }
for (p1, p2, p3) in permutations((b, r, y)):
v1 = int(NO) * p1 ** 3
v2 = int(NONE) * p2 ** 3
v3 = int(NOTHING) - v1 - v2
(n, x) = divmod(v3, p3 ** 3)
if x > 0: continue

printf("b={b} r={r} y={y} NO={NO} NIL={NIL} ZERO={ZERO} NONE={NONE} NOTHING={NOTHING}")
printf("pile 1: (NO) {NO} {c} cubes of side {p1}, volume {v1}", c=colour[p1])
printf("pile 2: (NONE) {NONE} {c} cubes of side {p2}, volume {v2}", c=colour[p2])
printf("pile 3: {n} {c} cubes of side {p3}, volume {v3}", c=colour[p3])
```

Solution: There are 21,413 blue cubes in the third pile.

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