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!