A puzzle (easy one)

Koroskin Denis 2korden at gmail.com
Thu Aug 7 07:34:55 PDT 2008


On Thu, 07 Aug 2008 18:11:27 +0400, Frank Benoit  
<keinfarbton at googlemail.com> wrote:

> Koroskin Denis schrieb:
>> On Thu, 07 Aug 2008 05:59:30 +0400, Frank Benoit  
>> <keinfarbton at googlemail.com> wrote:
>>
>>> Wyverex schrieb:
>>>> Wyverex wrote:
>>>>> BCS wrote:
>>>>>> Reply to Koroskin,
>>>>>>
>>>>>>> Write a one-line compile-time function (or template) that returns a
>>>>>>> number, which can be written in binary as 010101010...010101.  
>>>>>>> Exactly
>>>>>>> the  same code should work for byte, short, int, long, cent etc.
>>>>>>>
>>>>>>> No loops or recursion allowed. Use nothing but brain! :)
>>>>>>>
>>>>>>
>>>>>> template it(T)
>>>>>> {
>>>>>> T it =  
>>>>>> 0x5555_5555_5555_5555_5555_5555_5555_5555_5555_5555_5555_5555_5555_5555_5555_5555  
>>>>>> & (t.max | t.min);
>>>>>> }
>>>>>>
>>>>>>
>>>>> Tried something like this, but mine and yours gives integer  
>>>>> overflow...
>>>>   template crazy( T )
>>>> {
>>>>   T crazy =  0xAAAA_AAAA_AAAA_AAAA;
>>>> }
>>>>  as long as the hex string is less then ulong.max ...  or ucent.max  
>>>> when that gets implemented...
>>>
>>> template func( T ) { T func = mixin( "0x555555555555555555555555"[0 ..  
>>> T.sizeof*2+2] ); }
>>  No-no-no. It should work for integer type of *any* length (byte,  
>> short, long, cent and any future type).
>> And there is a *much* simpler solution!
>
> right.
> template func( T ) { T func = T.max/3; }

Doesn't work for signed types :P
But you are close!


More information about the Digitalmars-d-learn mailing list