I entirely agree that it is inefficient, but the other obvious solutions are
* Less readable
* Harder to tweak the probabilities on both in general and on a specific area/turf type
* Harder to quickly add exceptions and changes to

Also, honestly?  I'm not entirely sure that pick()ing turfs in an area is a better alternative, as it's one probability function to determine the gunk level of an area, and we know how good byond's random numbers are.  I think there's a gaussian random number generator in the unsorted procs, but I have no idea whether or how it works, nor how reliably.  With this code I have honestly no idea how much, or if any, gunk will be in, say, the morgue, which is a good thing.  It tends to feel pretty realistic.

Even keeping this code layout it would be more efficient to delegate the gunk selection to a turf or area proc and overwrite those for each case, however, things are organized in such a way that you would have a giant ass-load of redundant code to make that possible.  If it's appropriate, then it's appropriate, but I'm not going to do that work for my own server, especially since the cost at startup is fixed and marginal.