I always liked this example of an algorithm that naturally and efficiently uses mutation.
An even more familiar example is QuickSort. The algorithm naturally uses mutation, but there is also a functional version that is short and elegant, but also inefficient.
So I no longer have much interest in programming in languages without (idiomatic, easy) local mutation. (Quite the contrary, I would find a language with better support for explicit / exhaustive state machines more useful.) All my programs use local mutation and controlled global mutation with dependency inversion. I find that this style “scales” well. A couple comments on that: