On Monday, 18 August 2014 at 05:27:11 UTC, Andrei Alexandrescu wrote:
On 8/17/14, 9:06 AM, Fool wrote:
 http://dpaste.dzfl.pl/8fc83cb06de8

Yah, it's a good option. Relevant code:

if (right is whole)
{
    //writeln("case identical");
    return tuple(right, whole.dropExactly(whole.length));
}

(Prolly it would be better to use "whole.sameHead(right)" instead of "right is whole". Also whole may not define length so the actual algo is just a tad different.)

A cleaned-up version is here: http://dpaste.dzfl.pl/a8c36a0c36d0


Trouble is it takes O(n) for that trivial case and for what may be in all likelihood a useless return (iterate right all the way through the end and return the empty balance).

Yah, on the other hand you can only expect to get what you pay for.

The strategy that naturally arises from the basic algorithm is even worse. In the case at hand, it suggests executing n trivial swaps.


Loosely related, Xinok wrote a nice piece on in-place merge: http://goo.gl/AS2P4A. A great use of rotateTail.

Thanks for that link. It's a nice writeup.

-- Fool

Reply via email to