function dot = permutation_puzzle ( n )

%*****************************************************************************80
%
%% permutation_puzzle() exhibits a peculiar property of permutations.
%
%  Discussion:
%
%    Let P1 and P2 be arbitrary permutations of the integers from 1 to 10.
%
%    Pair corresponding entries of the permutations to create the set of 10 
%    points (P1(1),P2(1)) through (P1(10),P2(10)).  Now subtract 5, that is, 
%    N/2, from the X and Y coordinates of each point so that their average value 
%    is zero.  Then apply a rotation of 45 degrees to each vector.
%
%    Now instead of looking at 10 vectors (X(I),Y(I)), each of length 2, consider 
%    the data as two vectors X and Y, each of length 10.  If the instructions have 
%    been followed correctly, then X are Y are perpendicular to each other in 
%    10-dimensional space. 
%
%    In fct, this seems to be true for all the permutations you try.
%    You can even set P1 and P2 equal.  
%    You can try other values of N.
%
%    It does not work for most other rotation angles.  For example, a 30 degree
%    rotation will not work.
%
%    Once you've picked P1 and P2, you can take an arbitrary vector Q,
%    set Q1 = Q(P1) and Q2 = Q(P2) and carry out the transformation on Q1 and
%    Q2 instead of on P1 and P2, and it will still work.
%
%    The question is, can you show that all these statements are true, and
%    can you explain why?
%
%  Licensing:
%
%    This code is distributed under the MIT license.
%
%  Modified:
%
%    12 September 2009
%
%  Author:
%
%    John Burkardt
%
%  Input:
%
%    integer N, the vector length.
%
%  Output:
%
%    real DOT, the dot product of the two vectors.
%
  p1 = randperm ( n );
  p2 = randperm ( n );

  xy = [ p1; p2 ];

  xy = xy - ( n / 2 );

  angle = pi / 4;

  A = [ cos ( angle ), - sin ( angle ); ...
        sin ( angle ),   cos ( angle ) ]; 

  xy = A * xy;

  dot = xy(1,1:n) * xy(2,1:n)';

  return
end

