Thread overview | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
August 07, 2008 A puzzle (easy one) | ||||
---|---|---|---|---|
| ||||
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 Re: A puzzle (easy one) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Koroskin Denis | 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 Re: A puzzle (easy one) | ||||
---|---|---|---|---|
| ||||
Posted in reply to BCS | 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 Re: A puzzle (easy one) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Wyverex | 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 Re: A puzzle (easy one) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Wyverex | 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 Re: A puzzle (easy one) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Frank Benoit | 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 Re: A puzzle (easy one) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Koroskin Denis | 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 Re: A puzzle (easy one) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Frank Benoit | 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 Re: A puzzle (easy one) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Koroskin Denis | 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 Re: A puzzle (easy one) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Frank Benoit | Reply to Frank, > func( T ) { T func = mixin( "0x555555555555555555555555"[0 .. T.sizeof*2+2] ); } > Gaaahhh!!! My eyes <G> |
Copyright © 1999-2021 by the D Language Foundation