Question is: When do you decide that the person is off by a little,and try to give him a hint (retaining the faulty code in his program,that you DO see, but not addressess the problem) and when do you rewrite the code ?
Only rewrite the code when you think you can learn something from doing so. Otherwise just point them in the right direction and allow them to discover the answer for themselves. Either way the other person has the opportunity to learn the same amount.
Consider the (fictitious ;) example of someone who posts code on this site. The code is absolutely horrible, no strict, no warnings, flawed param parsing, doesn't check open calls, and so on. Do you rewrite the code for them? or do you point them to related resources on good coding practices? The only reason I would rewrite the code is that I think I could learn something by doing so. Even so, it could be argued that by posting the code I'd be doing them a disservice, so definately don't spend too much time writing code for them if you won't learn anything from the process.