<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class="im">
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
(apart from reading the documentation on every single<br>
trivial function in the std library?)<br>
</blockquote>
<br></div>
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.<br>
</blockquote><div><br></div><div>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).</div>
<div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
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). </blockquote>
<div><br></div><div>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)</div>
<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">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. </blockquote>
<div><br></div><div>Hehe, I didn't knew about chomp, thanks for the tip.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Instead of array(splitter) it's simpler to just split. </blockquote><div>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.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">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. </blockquote>
<div>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).</div><div><br></div><div>I should've used a foreach loop, I can't remember why I didn't x)</div>
<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">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.<br>
<br></blockquote><div><br></div><div>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 :)</div>
<div><br></div><div><a href="http://dpaste.dzfl.pl/20034431">http://dpaste.dzfl.pl/20034431</a><br></div></div><br></div></div>