Ruud H.G. van Tol on Thu, 30 Jan 2025 13:51:18 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: 2^[1,3]



On 2025-01-29 22:07, Bill Allombert wrote:
> On Wed, Jan 29, 2025 at 03:51:26PM +0100, Bill Allombert wrote:
>> On Wed, Jan 29, 2025 at 03:24:02PM +0100, Ruud H.G. van Tol wrote:
>>> On 2025-01-29 14:42, Bill Allombert wrote:
>>>> On Wed, Jan 29, 2025 at 02:28:46PM +0100, Ruud H.G. van Tol wrote:

>>>>> ? vecsum(2^[1,3])
>>>>> % 10.000000000000000000000000000000000000
>
> I geuss you can do vecsum([2^i|i<-[1,3]])

Yes, that is what was used in the initial email of this thread.

The shown example usage is to sum(2^[distinct decimal digits of a number]),
to derive a Map-key, for sorting integers into buckets.

I guess the basic wish here, is to more canonically create a meta-bitmap from a Set(), and/or from the (non-negative integer) keys of a Map(), etc.

-- Ruud


Example usage:

? {
  my(r=Map());
  for(i=1, 200
  , my(k=vecsum([ 1<<e |e<-Set(digits(i))]), v);
    if(mapisdefined(r,k,&v), v=concat(v,[i]), v=[i]);
    mapput(~r, k, v)
  );
  foreach(r, e  \\ how to properly traverse a Map?
  , my([k,v]=e[1]);
    if(#v > 2
    , printf("%4s => %s\n", k, v)
    )
  );
}
   2 => [1, 11, 111]
   3 => [10, 100, 101, 110]
   6 => [12, 21, 112, 121, 122]
  10 => [13, 31, 113, 131, 133]
  18 => [14, 41, 114, 141, 144]
  34 => [15, 51, 115, 151, 155]
  66 => [16, 61, 116, 161, 166]
 130 => [17, 71, 117, 171, 177]
 258 => [18, 81, 118, 181, 188]
 514 => [19, 91, 119, 191, 199]