Permitanme revivir un desafio anterior, @Pantaláimon estaba comparando los resultados de mi algoritmo con los del tuyo para hacerlo funcionar siempre y me he topado con que el tuyo tambien falla en determinadas circunstancias por ejemplo en esta:
http://jsfiddle.net/2mt8q/2/