On 2020-01-31 09:44, mark via Digitalmars-d-learn wrote:
I can't use the levenshtien distance because although it is a better solution, 
[...]

Nah, it isn't, sorry for the noise, should have slept before sending the message, was thinking of hamming distance:

auto a = "abcd";
auto b = "bcda";

auto hammingDistance(string a, string b) {
    return zip(a, b).count!(t => t[0] != t[1]);
}

levenshteinDistance(a, b).writeln; // => 2
hammingDistance(a, b).writeln;     // => 4

main() [...] doesn't match the behaviour

There's also std.range.tee if you ever need to perform additional side-effects in a range pipeline, which restores the original dot printing:

write("Try ");
auto res = generate!(() => genLadder(words.dup, STEPS))
    .enumerate(1)
    .tee!(_ => write('.'), No.pipeOnPop) // No.pipeOnPop ensures we're not one 
dot short
    .find!(a => !a[1].empty)
    .front;
writeln(" ", res[0]);

genLadder() [...] is so compact.

Thinking about it, you could even eliminate the prev variable all together when using ladder.back in compWords.

Regarding const correctness, this article and thread might contain useful information: https://forum.dlang.org/thread/2735451.YHZktzbKJo@lyonel

By the way, keep the documentation improvements coming, much appreciated!

Reply via email to