I could not resist...  :)

". noun define -. CRLF

CombBit=.

>@:(,.&.>/)@:((-@:(5&({::)) {. -@:(4&({::) | 1&({::)) , <.@:(1&({:
:) % 4&({::)) # 4&({::)) <@:([ {."1 #:@:])"0 1 >@:(,.&.>/)@:(3&({:
:)))@:((<@:(2&({::) 23 b.&.> ,.&.>/\.@:((2 (((_2) 32 b. 2 #: [) 23
 b. (_1) 33 b. ])/\ ])@:(0 , ])&.>)@:(3&({::))) 3} ])^:(0&({::)))@
:(<@:((1&({::) - 0&({::)) (([ $ <@:(0 $~ 0 ,~ ])) , <@:(0 $~ 1 ,~
])) 5&({::)) 3} ])@:(<@:(<"_1@:(<.@:(6&({::) % 4&({::)) |."0 1 (0
$~ 1 -~ 5&({::)) (,"1 0) 2 ^&.x: 4&({::) #: 6&({::))) 2} ])@:(<@:(
1&({::) - >:@:i.@:>:@:(1&({::) - 0&({::))) 6} ])@:(<@:(>.@:(1&({::
) % 4&({::))) 5} ])@:(<@:(63"_) 4} ])@:(,&(<;._1 ' K Z N L P')@:;)

)

A performance sample is,

   stp 111

2 combbit 4
2 CombBit 4

)
┌───────────┬─────┬─────────────┬────────────┐
│Sentence   │Space│Time         │Space * Time│
├───────────┼─────┼─────────────┼────────────┤
│2 combbit 4│13056│3.45637285e_5│0.451264039 │
├───────────┼─────┼─────────────┼────────────┤
│2 CombBit 4│5888 │2.24359098e_5│0.132102637 │
└───────────┴─────┴─────────────┴────────────┘

   stp 2

60 combbit 64
60 CombBit 64

)
┌─────────────┬─────────┬───────────┬────────────┐
│Sentence     │Space    │Time       │Space * Time│
├─────────────┼─────────┼───────────┼────────────┤
│60 combbit 64│178304896│0.774408636│138080851   │
├─────────────┼─────────┼───────────┼────────────┤
│60 CombBit 64│178297088│0.751941586│134068995   │
└─────────────┴─────────┴───────────┴────────────┘

The verb CombBit was produced using the J Wicked Toolkit as follows (beware
of line-wrapping),

or=.23 b.
lshift=.33 b.
lrot=. 32 b.
shift=. 2 ((_2 lrot 2 #: [) or _1 lshift ])/\ ]

'X Y K Z N L P'=. 7 Fetch

CombBit=. [tv f.
  'K Z N L P'local o ;

  N ((<:##:_1 (32 b.) 1)"_) h       NB. n=.<:##:_1 (32 b.) 1
  L (>. o (Y % N)) h                NB. l=.>.y%n
  P (Y - >: o i. o >: o (Y - X)) h  NB. y->:i.>:d=.y-x
  K (<"_1 o (<. o (P % N) |."0 1 (0 $~ 1 -~ L) ,"1 0 (2 ^&.x: N #: P))) h
    NB. <"_1(<.p%n)|."0 1((l-1)$0),"1 0 [2 ^&.x: n#:p
  Z ((Y - X) (([ $ <@:(0 $~ 0 ,~ ])) , <@:(0 $~ 1 ,~ ])) L) h
    NB. z=.((y-x)$<(l,0)$0),<(l,1)$0
  (Z (K or&.> ,.&.>/\.@:(shift@:(0 , ])&.>)@:Z) h)^:X
    NB. for. i.x do. z=. k (or)&.>  ,.&.>/\. ([:shift 0,])&.> z end.
  >@:(,.&.>/)@:(((-@:L){. -@:(N | Y) , (<.@:(Y % N))# N)  (<@:([ {."1
#:@:])"0 1)  >@:(,.&.>/)@:Z)
    NB. >,.&.>/((-l){.-(n|y),(<.y%n)#n) ([:<[{."1[:#:])"0 1 >,.&.>/z
)

   66 Wrap 'CombBit'
>@:(,.&.>/)@:((-@:(5&({::)) {. -@:(4&({::) | 1&({::)) , <.@:(1&({:
:) % 4&({::)) # 4&({::)) <@:([ {."1 #:@:])"0 1 >@:(,.&.>/)@:(3&({:
:)))@:((<@:(2&({::) 23 b.&.> ,.&.>/\.@:((2 (((_2) 32 b. 2 #: [) 23
 b. (_1) 33 b. ])/\ ])@:(0 , ])&.>)@:(3&({::))) 3} ])^:(0&({::)))@
:(<@:((1&({::) - 0&({::)) (([ $ <@:(0 $~ 0 ,~ ])) , <@:(0 $~ 1 ,~
])) 5&({::)) 3} ])@:(<@:(<"_1@:(<.@:(6&({::) % 4&({::)) |."0 1 (0
$~ 1 -~ 5&({::)) (,"1 0) 2 ^&.x: 4&({::) #: 6&({::))) 2} ])@:(<@:(
1&({::) - >:@:i.@:>:@:(1&({::) - 0&({::))) 6} ])@:(<@:(>.@:(1&({::
) % 4&({::))) 5} ])@:(<@:(63"_) 4} ])@:(,&(<;._1 ' K Z N L P')@:;)

It can certainly be simplified, but I will pass. :)



On Mon, Nov 13, 2017 at 10:31 AM, Erling Hellenäs <[email protected]>
wrote:

> Hi all!
>
> A new combbit with the limit lifted. Unfortunately somewhat slower.
>
>    x=:12
>    y=:24
>    ts'x combbit y'
> 0.213853 2.34326e8
>    ts'x combbitOld y'
> 0.108748 1.33655e8
>
> combbit=: 4 : 0
> or=.23 b.
> lshift=.33 b.
> lrot=. 32 b.
> shift=. 2 ((_2 lrot 2 #: [) or _1 lshift ])/\ ]
> n=.<:##:_1 (32 b.) 1
> l=.>.y%n
> p=.y->:i.>:d=.y-x
> k=.<"_1(<.p%n)|."0 1((l-1)$0),"1 0 [2 ^&.x: n#:p
> z=.(d$<(l,0)$0),<(l,1)$0
> for. i.x do. z=. k (or)&.>  ,.&.>/\. ([:shift 0,])&.> z end.
> >,.&.>/((-l){.-(n|y),(<.y%n)#n) ([:<[{."1[:#:])"0 1 >,.&.>/z
> )
>
> Cheers,
>
> Erling Hellenäs
>
>
>
> Den 2017-11-13 kl. 11:37, skrev Raul Miller:
>
>> Hmm... nice.
>>
>> combbit pulls out way ahead by working with a more compact and fixed
>> width representation, which makes sense. You give up being able to do
>> things like 3 combbit 100, but that might not be relevant in some
>> contexts.
>>
>> That said, I'd probably put those -: test cases in asserts rather than
>> running them as readable output. I'd also be tempted to make a few
>> other changes. (Most of which I've not included here, for
>> comparability purposes.)
>>
>> Also, of course, when I run this I get different times. But timing
>> differences of up to 30% are typical and anything less than a factor
>> of 2 isn't really interesting.
>>
>>     x=:5
>>     y=:10
>>     1000 ts 'x comb y'
>> 2.7068e_5 50944
>>     1000 ts'x combbool y'
>> 2.3684e_5 22528
>>     1000 ts'x combbit y'
>> 1.8143e_5 21376
>>     1000 ts'x combbitub y'
>> 3.1611e_5 13824
>>     1000 ts'x CombBool y'
>> 2.1586e_5 14976
>>     1000 ts'x CombBit y'
>> 1.3287e_5 15232
>>     1000 ts'x bitcomb y'
>> 1.8703e_5 50688
>>     1000 ts'x combboolT y'
>> 2.1642e_5 15744
>>
>>     x=:12
>>     y=:24
>>     ts 'x comb y'
>> 0.705435 9.02647e8
>>     ts'x combbool y'
>> 0.240168 2.82336e8
>>     ts'x combbit y'
>> 0.124814 1.33655e8
>>     ts'x combbitub y'
>> 0.123766 1.17444e8
>>     ts'x CombBool y'
>> 0.234092 2.33133e8
>>     ts'x CombBit y'
>> 0.121827 1.33654e8
>>     ts'x bitcomb y'
>> 1.30437 1.34218e9
>>     ts'x combboolT y'
>> 0.216018 2.33135e8
>>
>>     x=:55
>>     y=:60
>>     ts 'x comb y'
>> 48.7158 1.40301e10
>>     ts'x combbool y'
>> 5.9218 2.29064e9
>>     ts'x combbit y'
>> 0.829234 6.75567e8
>>     ts'x combbitub y'
>> 0.6971 6.71092e8
>>     ts'x CombBool y'
>> 5.56716 1.71798e9
>>     ts'x CombBit y'
>> 0.765956 6.75566e8
>>     NB.ts'x bitcomb y' -limit error
>>     ts'x combboolT y'
>> 5.67477 1.71798e9
>>
>> Thanks,
>>
>>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to