That expression can be simplified to [:
Thanks, -- Raul On Sat, May 11, 2013 at 2:58 AM, Linda Alvord <[email protected]> wrote: > Maybe this illustrates where "too many caps" comes from. > > ',{:+ [: {:}:y'(13 : ) > [: , [: {: [: + [: [: [: {: }: > > It breaks my heart to replace all the Caps with Ats! > > You change a nice right to left tacit expression back to a left to right > parenthesized expression. > > Is it possible to improve on how the expression above inserts the Caps? > > Linda > > -----Original Message----- > From: [email protected] > [mailto:[email protected]] On Behalf Of Jose Mario > Quintana > Sent: Thursday, May 09, 2013 6:26 PM > To: [email protected] > Subject: Re: [Jprogramming] rosettacode > > Skip, I finally was able to take a look at your version. The following > should be a series of equivalent definitions of your version. I do not code > explicitly thus the control words are alien to me but they probably are > correct: > > jose1=: 4 : 0 > k =. y - 1{x NB. k is the number of "kills" > L =. i. y NB. L is the position list > whilst. k =. k-1 do. > L =. (<:0{x) |. L NB. Rotate by the skip number > L =. }. L NB. Remove the dead index. > end. > ) > > Substituting L in the first line of the whilst block into the second line, > > jose10=: 4 : 0 > k =. y - 1{x NB. k is the number of "kills" > L =. i. y NB. L is the position list > whilst. k =. k-1 do. > L =. }. (<:0{x) |. L NB. Removing the dead index after rotating by the > skip number > end. > ) > > Replacing the whilst by a for form, > > jose11=: 4 : 0 > k =. y - 1{x NB. k is the number of "kills" > L =. i. y NB. L is the position list > for. i.k do. > L =. }. (<:0{x) |. L NB. Removing the dead index after rotating by the > skip number > end. > ) > > Eliminating L by reusing y, > > jose12=: 4 : 0 > k =. y - 1{x NB. k is the number of "kills" > y =. i. y NB. L is the position list > for. i.k do. > y =. }. (<:0{x) |. y NB. Removing the dead index after rotating by the > skip number > end. > ) > > Finding a tacit form for the for block... > > '}. (<:0{x) |. y' (13 :) > [: }. ] |.~ [: <: 0 { [ > > Replacing Caps by Ats because Caps are overused! ;) > > }.@:(] |.~ <:@:(0 { [)) > }.@:(] |.~ <:@:(0 { [)) > > Replacing the for form by a power form, > > jose13=: 4 : 0 > k =. y - 1{x > y =. i. y > x (}.@:(] |.~ <:@:(0 { [))) ^: k y > ) > > Making a one-liner by substituting k and y in the first and second lines into > the code of the last line, > > jose14=: 'x (}.@:(] |.~ <:@:(0 { [)))^:(y - 1{x) i. y' (4 :) > > Trying to find a tacit expression, > > 'x (}.@:(] |.~ <:@:(0 { [)))^:(y - 1{x) i. y' (13 :) > 4 : 'x (}.@:(] |.~ <:@:(0 { [)))^:(y - 1{x) i. y' > > No, J is not smart enough; not yet anyway. Replacing (y - 1{x) by __ to find > the form, > > 'x (}.@:(] |.~ <:@:(0 { [)))^:__ i. y' (13 :) [ }.@:(] |.~ <:@:(0 { > [))^:__ [: i. ] > > Replacing the offending Cap, > > [ (}.@:(] |.~ <:@:(0 { [))^:__) i.@] > [ }.@:(] |.~ <:@:(0 { [))^:__ i.@] > > Consulting the Dictionary for power... Yes, the gerund form fits the bill! > > jose15=. }.@:(] |.~ <:@:(0 { [))^:((] - 1 { [)`(i.@])) > > 3 7 (jose1 ; jose15) 10000 > ┌────────────────────────────────┬────────────────────────────────┐ > │8922 111 930 2691 3850 6154 6624│8922 111 930 2691 3850 6154 6624│ > └────────────────────────────────┴────────────────────────────────┘ > > They compare as follows, > > st=. 7!:2@:] ; 6!:2 > > 10 st '3 7 jose1 10000' > ┌──────┬────────┐ > │133440│0.100217│ > └──────┴────────┘ > 10 st '3 7 jose15 10000' > ┌──────┬────────┐ > │263808│0.184226│ > └──────┴────────┘ > > The explicit version is leaner and faster but my attitude is to wait for the > implementation to catch up (I would not bet on it though). Wait! > Apparently the issue is more complicated than just explicit versus tacit, > > ((<10) (((,@<@]) , st) &> ) (('3 7 ' , ] , ' 10000'"_)each @: ;:)) > 'jose1 jose10 jose11 jose12 jose13 jose14 jose15' > ┌────────────────┬──────┬────────┐ > │3 7 jose1 10000 │133440│0.100398│ > ├────────────────┼──────┼────────┤ > │3 7 jose10 10000│199104│0.183993│ > ├────────────────┼──────┼────────┤ > │3 7 jose11 10000│265152│0.174459│ > ├────────────────┼──────┼────────┤ > │3 7 jose12 10000│265152│0.173494│ > ├────────────────┼──────┼────────┤ > │3 7 jose13 10000│265728│0.181894│ > ├────────────────┼──────┼────────┤ > │3 7 jose14 10000│265920│0.180529│ > ├────────────────┼──────┼────────┤ > │3 7 jose15 10000│263808│0.180721│ > └────────────────┴──────┴────────┘ > > This is puzzling to me; then again, I do not know much (to say the least) > about the performance of explicit code. > > > > > On Sat, May 4, 2013 at 1:42 AM, Skip Cave <[email protected]> wrote: > >> Very nice Elton and Jose! I had a bug in my explicit formula, as well >> as having some extra variables I didn't need. So I simplified my >> formula and changed the index to the "Mayan Way" (zero index). >> >> jose1=: 4 : 0 >> k =. y - 1{x NB. k is the number of "kills" >> L =. i. y NB. L is the position list >> whilst. k =. k-1 do. >> L =. (<:0{x) |. L NB. Rotate by the skip number >> L =. }. L NB. Remove the dead index. >> end. >> ) >> >> So now my results match Jose and Elton's tacit versions. >> >> 3 4 jose1 20 >> 19 1 7 12 >> >> 5 1 jose1 200 >> 112 >> >> 7 10 jose1 345 >> 283 287 295 319 72 92 93 137 175 224 >> >> Interestingly: >> >> Ts '7 10 jose1 345' >> 0.0028602 6464 >> >> Ts '7 10 jose 345' >> 0.0010386 65664 >> >> Ts '3 7 jose1 10000' >> 0.0823621 133440 >> >> Ts '3 7 jose 10000' >> |stack error: jose >> | 3 7 jose 10000 >> >> Where jose1 is my explicit version, and jose is Elton's tacit version. >> >> Elton, I'm trying to parse through your tacit version to understand >> how it works. Could you break it appart, and explain what is going on in >> there? >> >> Is it possible to implement my explicit algorithm in a tacit >> expression that won't get a stack error with large numbers? >> >> Skip >> >> >> On Fri, May 3, 2013 at 7:13 PM, elton wang <[email protected]> wrote: >> >> > modified from Jose's recursive form: >> > >> > jose =. i.@{:@[`(] | {.@[ + [ $: _1 + ])@.({:@[ < ]) >> > >> > >> -- >> Skip Cave >> Cave Consulting LLC >> ---------------------------------------------------------------------- >> For information about J forums see http://www.jsoftware.com/forums.htm >> > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
