I put my PLC code back in to test for solutions, and sort of got it working.
It found 4 solutions (pure solutions that is, nothing sneaky with decimal points and the like).
I wanted to see if it could be done in one scan of the code, so used a series of nested FOR loops, and basically blindly iterating every damn combination. But the I had to do checking in the innermost loop to ensure we had all different values for a-j. This obviously slowed the process considerably, so Heap's algorithm would dramatically reduce the time taken.
First thing the checking did was RETurn if A>=B, or C>=D, then I just matrix checked the others against each other, RET'ing at every conceivable opportunity. If the numbers got through all the checks, I calculated and compared the fractions.
Anyway - it found the 4 solutions as follows.....
1st : @08:10 minutes
2nd : @09:40 minutes
3rd : @15:15 minutes
4th : @17:27 minutes
At 33 minutes in, the task watchdog faulted the processor (I had set it to maximum = 2000 mS), but at the time of faulting the a, b, c, d values were 6, 9, 7, 2 respectively, and I cannot believe there would be any more solutions above that. It's something I could test for by starting a & B at, say 5, and see if any more solutions exist, but I doubt it.
Incidentally, I had written a Program Fault routine to reset the Type 6, Code 1 task watchdog fault, but this did NOT work - Then realised a Task fault should be in the Controller Fault Handler, so I moved my fault handling to there, and it didn't work there either.... I believe the controller won't let you reset a watchdog fault.
So my answer is there are only four possible non-contentious solutions. (We are talking about the left hand equation, haven't thought about the other, yet).