I added a solution to the task at RosettaCode.  If we let J do the work for us, 
the solution is fairly simple. We use ^:a: ("swop" until you hit your fixed 
point, i.e. until 1={. ) and the count is the number of swops, i.e. the length 
of the result.

The task calls for calculating the "topswop" all possible permutations of N 
integers (i.e. the maximal number of swops for any given permutation of rank 
N). The task only calls for N up to 10, so brute force (calculating all !N 
swops and taking the max) suffices.   But for large N, brute force would 
explode, so another method would be required.

Just looking at the series, I suspect a simple arithmetical (combinatorical) 
solution exists.  It might even be ready-made in the OEIS.  But I'll leave that 
to you smart guys.

-Dan


Please excuse typos; composed on a handheld device.

On Nov 26, 2012, at 9:19 PM, David Ward Lambert <b49p23t...@stny.rr.com> 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

Reply via email to