From The Sunday Times, 18th April 1982 [link]
The Manager of a large company greeted his twelve new computer staff. “You have been given consecutive, five-digit, Staff Reference Numbers (SRN). I remember numbers by finding their prime factors, using mental arithmetic — pre-computer vintage. Why not try it? If you would each tell me what factors you have, without specifying them (and ignoring unity), I should be able to work out your SR numbers”.
John said: “My number is prime.”
Ted said ” I have two prime factors. Your number follows mine doesn’t it, Les?”
Ian said: “I also have two, one of which squared. Alan’s just before me on the list.”
Sam said: “One of mine is to the power four. The last two digits of my SRN give me the other prime factor.”
Pete said: “I’ve got one factor to the power four as well. The other one is my year of birth.”
Brian said: “My number has one prime factor cubed and two others, both squared.”
Chris said: “I’m the only one with four factors, one of which is squared. Fred’s number is one less than mine.”
Dave started to say: “Kevin’s SRN is the one after mine, which …” when the Manager interrupted. “I can now list all twelve!”
List the twelve people, by initials, in increasing order of SRNs. What is Sam’s SRN?
This was the final puzzle to go by the title “Brain teaser“. The next puzzle was “Brainteaser 1030“.
This puzzle is included in the book The Sunday Times Book of Brainteasers (1994).
[teaser1029]
Jim Randell 8:05 am on 12 August 2025 Permalink |
See also Teaser 2835, which is a similar problem on a cube, rather than a regular tetrahedron.
The only option for a single line to divide an equilateral triangle into two triangles of equal area is a line that runs from one vertex to the centre of the opposite side.
This program follows the same strategy as my program for Teaser 2835 — we first define a class that deals with the rotations of the regular tetrahedron, and then use that to determine the number of different constructions.
Here is the
Tetraclass:# labels for the 4 faces face_label = "DLRB" (D, L, R, B) = (0, 1, 2, 3) # the 12 rotational positions of a regular tetrahedron # we record the positions of the faces # and their orientations (in clockwise 1/3 turns) _rotations = ( # the first 4 match with a rotation of the face D, L, R, B # faces orientations # D L R B D L R B D B ((D, B, L, R), (1, 0, 0, 0)), # D R = rotate D ((R, L, B, D), (0, 1, 2, 1)), # R D = rotate L ((B, D, R, L), (1, 0, 1, 2)), # B L = rotate R ((L, R, D, B), (2, 2, 2, 1)), # L B = rotate B # the remaining rotations can be derived from those above ((D, L, R, B), (0, 0, 0, 0)), # D B = rotate [] ((D, R, B, L), (2, 0, 0, 0)), # D L = rotate DD / LR / RB / BL ((R, D, L, B), (1, 1, 1, 2)), # R B = rotate BB / RL / LD / DR ((R, B, D, L), (2, 2, 1, 1)), # R L = rotate LDD / RBB ((B, R, L, D), (0, 1, 2, 0)), # B D = rotate LBB / RDD ((B, L, D, R), (2, 2, 0, 1)), # B R = rotate LL / RD / BR / DB ((L, D, B, R), (1, 2, 1, 2)), # L R = rotate BDD / DBB ((L, B, R, D), (0, 1, 2, 2)), # L D = rotate RR / LB / BD / DL ) # map names to rotations D, L, R, B _names = dict(zip(face_label, (D, L, R, B))) # a class representing the rotations of the regular tetrahedron class Tetra(object): def __init__(self, faces=(D, L, R, B), orientations=(0, 0, 0, 0)): self.faces = tuple(faces) self.orientations = tuple(orientations) # a new tetra derived from the old one by applying the specified transformation def transform(self, faces, orientations): return Tetra( faces=tuple(self.faces[i] for i in faces), orientations=tuple((self.orientations[i] + r) % 3 for (i, r) in zip(faces, orientations)) ) # generate all rotations of the tetra def rotations(self): for (faces, orientations) in _rotations: yield self.transform(faces, orientations) # apply specific rotations def rotate(self, ts): tetra = self for t in ts: tetra = tetra.transform(*(_rotations[_names.get(t, t)])) return tetraAnd the following Python program runs in 67ms. (Internal runtime is 2.04ms).
from enigma import (subsets, printf) from tetra import Tetra # canonical representation of the lines on the faces # - faces cannot be distinguished # - lines can be in one of three positions (0, 1, 2) def canonical(s): tetra = Tetra(orientations=s) return min(r.orientations for r in tetra.rotations()) # consider possible orientations of the faces D, L, R, B patterns = set(canonical(s) for s in subsets((0, 1, 2), size=4, select='M')) # output solution printf("{n} patterns", n=len(patterns))Solution: There are 9 different tetrahedra in the set.
LikeLike