This looks like another case of trying to fit J into a C-shaped box.


On Mon, Nov 26, 2012 at 9:46 PM, Marshall Lochbaum <mwlochb...@gmail.com>wrote:

> Appending a counter is the easiest. Since we never reverse more elements
> than there are in the list, we don't even have to bother with removing
> the counter. Here's my code.
>
>    topswap =: [: {: [: (>:@{: _1} ((|.@{. , }.)~ {.))^:(1~:{.)^:_ ,&0
>    topswap 2 4 1 3
> 4
>
> The part inside the while loop is (>:@{: _1} ((|.@{. , }.)~ {.)). You'll
> recognize the right half of the fork as topswap from your message, and
> the rest simply replaces the last element with its successor.
>
> Then we only have to maximize this over all permutations. To generate
> all permutations of (>:i.y), we have
>
>    allperms =: i.@! A. >:@i.
>
> So one solution to the problem is
>
>    topswaps =: [: >./ topswap"1@:allperms
>
> Of course this is rather inefficient. For an efficient solution I advise
> copying the C algorithm.
>
> Marshall
>
> On Mon, Nov 26, 2012 at 09:19:37PM -0500, David Ward Lambert wrote:
> > Reference: http://rosettacode.org/wiki/Topswops
> > What are good ways to count iterations?
> >
> >    While=: 2 : 'u^:v^:_'
> >
> >    topswop=: (|.@:{. , }.)~ {.
> >
> >    topswop While (1 ~: {.) 2 4 1 3
> >  1 2 3 4
> >
> > These ideas seem like structural nightmares:
> > * separate data and counter with boxes;
> > * append a counter to the data;
> > * explicit code with a global noun;
> > * +/@:(0 = (0,~topswop)While(1 ~: {.))  NB. <laughs>.
> >
> > The boxes or explicit code seem most general.
> >
> > Thank you, Dave.
> >
> > Bonus: find a definition topswop using C.
> >
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>



-- 
Devon McCormick, CFA
^me^ at acm.
org is my
preferred e-mail
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to