Thread overview
A puzzle (easy one)
Aug 07, 2008
Koroskin Denis
Aug 07, 2008
BCS
Aug 07, 2008
Wyverex
Aug 07, 2008
Wyverex
Aug 07, 2008
Frank Benoit
Aug 07, 2008
Koroskin Denis
Aug 07, 2008
Frank Benoit
Aug 07, 2008
Koroskin Denis
Aug 07, 2008
Frank Benoit
Aug 08, 2008
BCS
August 07, 2008
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! :)
August 07, 2008
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);
}


August 07, 2008
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...
August 07, 2008
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...
August 07, 2008
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] ); }
August 07, 2008
On Thu, 07 Aug 2008 05:59:30 +0400, Frank Benoit <keinfarbton@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!
August 07, 2008
Koroskin Denis schrieb:
> On Thu, 07 Aug 2008 05:59:30 +0400, Frank Benoit <keinfarbton@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; }
August 07, 2008
On Thu, 07 Aug 2008 18:11:27 +0400, Frank Benoit <keinfarbton@googlemail.com> wrote:

> Koroskin Denis schrieb:
>> On Thu, 07 Aug 2008 05:59:30 +0400, Frank Benoit <keinfarbton@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!
August 07, 2008
Koroskin Denis schrieb:

>> right.
>> template func( T ) { T func = T.max/3; }
> 
> Doesn't work for signed types :P
> But you are close!

template func( T ) { T func = T.min < 0 ? T.max/3*2+1 : T.max/3; }



August 08, 2008
Reply to Frank,

> func( T ) { T func = mixin( "0x555555555555555555555555"[0 .. T.sizeof*2+2] 
); }
> 


Gaaahhh!!! My eyes <G>