> > (apart from reading the documentation on every single >> trivial function in the std library?) >> > > Before using every function from the standard library you have to read its > documentation, this is sure. You can not assume its behavour to be exactly > the same you hope it to have. This is true for languages as Python too. >
While this is true, one can safely assume that a function called "writeln" that takes a string will print that string and in the process not alter the source. (Or at least, that's what I hope to be possible). > Regarding your very quickly written D code, I suggest to decrease the > indents size, put a space around operators, put immutable/const to > everything that doesn't need to change (unless there are problems doing > so). I was timing the time it took me to go from exercise to working program. I figured spamming immutable everywhere would only slow time down while not increasing productivity (for small programs. If I were to write something big, that is indeed a must) > I also suggest to use UFCS chains, because they are more readable for this > kind of code. Instead of the readln()[0..$-1] you could chomp, strip or do > not retain newlines. Hehe, I didn't knew about chomp, thanks for the tip. > Instead of array(splitter) it's simpler to just split. also a hidden gem. I always go for my goodies to std.algorithm, I didn't expect there to be 'duplicates' in std.array as well. > Instead of chain.length==0 it's better to use empty. The foreach usually > doesn't need a type, and probably your for loop could written as a better > foreach. I like to spam types everywhere, it's something I've grown used to. I don't like the concept of auto (although I do see why it could potentially increase productivity). I should've used a foreach loop, I can't remember why I didn't x) > I also suggest to add contracts to your code. Instead of returning a > "can't be solved", probably there are stronger typed solutions, like using > an Algebraic or Nullable. > > Yes, that was a bit ad-hoc decided. I was hesitating to use some kind of bool for true-solved and false-unsolved and have the found parameter be by ref. I came up with something that looks a bit neater now :) http://dpaste.dzfl.pl/20034431