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 <[email protected]> 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