If I'm right, do I win a prize...
Break (pun intended) the pool balls into three groups, A, B, C.
Weigh group A against group B. Three things can happen...
------------
A=B
------------
If (A)=(B), then group (C) contains the oddball. Take 3 balls from (C)
and 3 balls from (B) and compare them.
If they weigh the same, then the single, omitted ball from group (C)
is the oddball, and our final weigh will be used to determine whether it
is heavier or lighter.
If they do not weigh the same, then we know at this stage whether the
oddball is heavier or lighter, we just need to know which of the three
balls from group (C) it is. Weighing any two of the three balls against
each other will tell us the answer.
-------------------------------------------
A>B (and also B>A, but just reversed)
-------------------------------------------
(A) either contains a heavy oddball, or (B) contains a light oddball.
Form two new groups, each consisting of two balls from (A) and one
ball from (B).
If we weigh these two groups against each other and they are uneven,
then weigh the two (A) balls from the heavier side. If they are even,
then the (B) ball on the lighter side is the oddball. If they are
uneven, then the heavier (A) ball is the oddball.
If, when we weigh the two groups of (A)(A)(B) against each other, they
are even, then the two (B) balls we left out from the weigh, need to be
compared, and the lighter of the two will be the oddball.
-Chris
My method is to give each ball a distinctive 'weighing code' to tell me when I should use it in
the weighing. A weighing code consists of three letters; the first letter tells me what I should
do in the first weighing, the second letter in the second, and the third in the third. L means
'put on left plate', R 'put on right plate' and N 'put on neither plate'. So 'LNR' means to put
that ball on the left plate, then leave it out of the second weighing, then put it on the right
plate.
After each weighing, I would write down with a single letter which plate was pressed down the
most, or 'N' if the plates balanced. This gives me a 'solution code'; if this was the result of
one ball being heavier, the solution code would equal its weighing code; if lighter, the inverse
of its weighing code (ie L instead of R and vice versa). It follows that no two balls should
have either the same or inverse weighing codes as each other, as this would leave me with no
unique answer; also that 'NNN' is not acceptable as a weighing code because it is self-inverse,
so would not tell me whether the ball is lighter or heavier. This leaves 5 types of weighing
code:
1. LLL or RRR : for aesthetic reasons I am not using this one.
2. Put once on one plate, and twice on the other: there are three of these (with inverses):
RLL (LRR), LRL (RLR), LLR (RRL)
3. Put once on each plate: again, 3 of these: LRN (RLN), NLR (NRL), RNL (LNR)
4. Put twice on the same plate: LLN (RRN), NLL, (NRR), LNL (RNR)
5. Put once on one plate: LNN (RNN), NLN (NRN), NNL (NNR)
Now I need to pick 12 codes that 'balance', ie have equal numbers of balls on the left and
right plates on each weighing. I have deliberately made my groups cyclical (of the form ABC,
CAB, BCA) , so that I don't need to worry about each weighing, only the overall balance of
left and right:
Group 4 is biased by 2 balls on each weighing to one side.
Groups 2 and 5 are biased by 1 ball on each weighing to one side.
Group 3 is balanced.
Therefore I shall take the right-biased version of group 4 (shown as the inverses above) and
the left-biased versions of groups 2 and 5, so that the biases cancel out.
I now write out 12 labels as follows (assuming the labels are of negligible mass):
RRN NRR RNR
RLL LRL LLR
LNN NLN NNL
LRN NLR RNL
I stick one label on each ball, do the weighings, following the instructions on the balls, and
get my solution code and its inverse. If the solution code is one of the codes above, then the
ball so labelled is heavier than the rest. If instead the inverse is one of the codes above,
then the ball so labelled is lighter than the rest.
Did I get it right? Even if I did, I would love to hear an easier, but still logical, solution.
No, I probably didn't explain it very well.
It works like this: if there is a heavier ball, it will weigh down whichever pan it is put in,
every time it is used. This will show up as a pattern of weighed-down pans that corresponds
exactly to where the ball is. Similarly is it is lighter the opposite will occur, and you will see
a pattern of lifted pans corresponding to where the ball is. The weighing codes are just a way
of expressing this compactly. The rest is all about a) making sure all the codes are different
from each other and b) making sure there are always an equal number of balls on left and
right.
I think my method is equivalent to Chrismo's/Smash's, but I tried to explain how I arrived at
that solution as well. Also I have used a more general approach, which takes more
explanation in the specific case but I think it can be adapted to different numbers of balls/
weighings.
if its level, then it is easy:
4 balls with one suspect.
put three on one side, three 'normal' on the other
if level, then try the last one against a normal to see if it is heavier or
lighter
if not, you know if the bad one is lighter or heavier.
now put 2 of them against each other. Level, then its the third.
Not level, then its the one that goes in the direction of the three in
previous weighting;
next step: what if the first 8 are not level. someone else?
I tried using this method, but if the first 8 are not level it gets a bit difficult to explain. I
have posted what I think is a solution, and yes it does involve weighing 4 against 4 at the
start (as well as the other 2 weighings), but it allows you to plan all the weighings in
advance, so there's no decision tree.