How would you solve this 'interview' question in D?

John Colvin john.loughran.colvin at gmail.com
Thu Jun 27 16:14:46 PDT 2013


On Thursday, 27 June 2013 at 22:31:21 UTC, Timon Gehr wrote:
> On 06/27/2013 09:48 PM, John Colvin wrote:
>> On Thursday, 27 June 2013 at 18:37:26 UTC, Timon Gehr wrote:
>>> On 06/26/2013 10:51 PM, Gary Willoughby wrote:
>>>> Just for a bit of fun, I saw this question posted on reddit 
>>>> the other
>>>> day and wondered how *you* would solve this in D?
>>>>
>>>> http://stackoverflow.com/questions/731832/interview-question-ffn-n
>>>
>>> int f(int x){ return x?(x&1?x:-x)+(x>0?1:-1):0; }
>>>
>>> unittest{
>>>    foreach(x;int.min..int.max)
>>>        assert(f(f(x))==-x);
>>> }
>>
>> That highly compound statement..... Why?
>
> It is easy to see what it is doing this way.

Unless you're a hardened c/c++ etc. programmer, those 26 
characters in a row are far from immediately obvious.

Personally I learnt to code in C and therefore it only took me 
15-20 seconds to be sure I knew what was happening, but even so 
at first glance it's just an incomprehensible string of symbols.

Perhaps it's just a matter of taste, but I think that there's a 
sweet-spot for compact v.s. verbose and it lies somewhere to the 
verbose side of nested  ternary operators with no spaces.

In this example, just separating the main calculation from the 
special 0 case and adding a few spaces would make it much more 
understandable at first glance.
e.g.
int f(int x) {
     if(x)
         return (x&1 ? x:-x) + (x>0 ? 1:-1);
     return 0;
}


More information about the Digitalmars-d-learn mailing list