But how would it know to attempt to combine? A simple swap would involve only two tiles, the 7/7 and the 1/7. That's simple. Checking that there are additional 1/7 tiles around so that the liquids could balance out at 4/7+3/7+2/7 would not be as trivial.
Probably should have gone into a bit more depth on that, I figured the best way is to only look at the tile directly away from the one encountered that contains a different type, and if it can't combine, just do the swap as normal. This would allow for non-full tiles to wander around for a time, which again would definitely look strange, but eventually they'd combine with the others of their kind.
And we can estimate how hard it is to code something. We don't know about the state of Toady's code, but we can estimate how hard it would be to code from scratch. Also, we know how water currently behaves. It's unlikely Toady coded it is a strange way, so we can guess at the current code pretty well too.
We have a vague idea, but there are two unknowns that make it difficult:
1. We don't know what data structures he's using and how he's using them, and just how much of the surrounding code is tied to the assumption that the liquid contents of a tile can be treated as a single number.
2. We haven't come up with the general purpose algorithm and analyzed the edge cases of the primary system everyone is in favor of.
In my opinion, this makes it more of a "gut feeling" than a real estimate, but gut feelings are valid too. I happen to agree with your assessment in this case, but one thing I wanted to make clear is that we are making assumptions, and we should be clear about what those assumptions are.
Re: layering
I agree that that's the right way to do it, but that does add it's own mixing challenges. For instance: if shallow water and oil mix then the two can just spread out independently. However, if you have two adjacent tiles with no air gap you would still want the oil to spread out.
The biggest challenge I can think of with multiple liquids per tile is making the exchange process take place when multiple liquids are present without hammering the CPU.
The most obvious approach is to search each element of the entire liquid storage structure of tile 1 against each element of tile 2, complete a reaction if reacting elements are found in that search, then if not and if there is sufficient difference, exchange this liquid for a different liquid or liquids which would have to somehow have been chosen along the way. (That last part would be quite tricky)
Another option that came to mind is to take all of the array elements from both and put them into a single structure that contains all possible types, compute reactions, and then split it back up and assign the results back to both tiles.