edit: Alternative (nicer?) solution using a lot of weighing
First note that with the weighing scale we sometimes can distinguish more than 3 states (which I use once below)
Make 4 groups a,b,c,d; each with coins 1..6
weigh ab, bc, cd
Case1: Not all weights the same:
4) weigh a (now you also know the weight of b,c,d, and thus in which group or 2 groups they are**)
If fakes from 1 group (then non cancelling)
5) weigh half of each group (due to non cancelling fakes we know if 0,1,or 2 fakes)
- if 1 6)7) balance to find the fakes in their 2 half-groups
- if 0/2 6) measure 14 of each group 7) measure 25 of each group (done in 7)
If fakes from 2 groups
5)6) and 7)8) balance to find the fakes in their 2 groups **
** not identifyable if 2 equal heavies/2 equal lights
Then weigh 123 of one heavy and one light group. If twice that weight is:
- weight light group -> no fake and fakes are heavy
- weight light group + dif (i.e. weight heavy group) -> no fake and fakes are light
- weight light group + 2x dif -> a heavy fake
- weight light group - dif -> a light fake
6) and 7)8) balance to find the fakes in their 2 groups (of 3 resp 6)
Case2: All weights the same: (canceling fakes in one group )
4) weigh 123 from each group
= 123 canceling or 456 canceling
5) weigh 14; 6) weigh 25 7)8) balance to find low from 8 candidates
> 123 heavy 456 light
5) balance 1-3 6) balance 4-6 and 7)8) balance to find low from 4 candidates
Original solution