⍝ Permutation matrix of ⍳⍵:

    ⎕io←1

    pmat 3                              ⍝ 3-perms
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

    ⍕{⍵[pmat⍴⍵]}'tic' 'tac' 'toe'       ⍝ Perms of nested vector
 tic  tac  toe 
 tic  toe  tac 
 tac  tic  toe 
 tac  toe  tic 
 toe  tic  tac 
 toe  tac  tic 

    ⍕4 3 2⍴↓{⍵[pmat⍴⍵]}'abcd'           ⍝ Folded perms of simple 4-vector
 abcd  abdc 
 acbd  acdb 
 adbc  adcb 
            
 bacd  badc 
 bcad  bcda 
 bdac  bdca 
            
 cabd  cadb 
 cbad  cbda 
 cdab  cdba 
            
 dabc  dacb 
 dbac  dbca 
 dcab  dcba 

    ⍕display∘pmat¨2 1 0                 ⍝ Limiting cases
 ┌→──┐  ┌→┐  ┌⊖┐ 
 ↓1 2│  ↓1│  ↓0│ 
 │2 1│  └~┘  └~┘ 
 └~──┘           

    (!0 to 5) ≡ ⎕io∘⊃∘⍴∘pmat¨0 to 5     ⍝ Result lengths.
1
                                        ⍝ Rows of the permutation matrix form
    {⍵⍳⍵∘.{⍺⊃¨⊂⍵}⍵}↓pmat 3              ⍝ a group under ⊃¨∘⊂ with identity ⍳⍵.
1 2 3 4 5 6
2 1 4 3 6 5
3 5 1 6 2 4
4 6 2 5 1 3
5 3 6 1 4 2
6 4 5 2 3 1

    perms←{                     ⍝ Apply ⍺⍺ to each perm of ⍳⍵
        ⍬ ⍺⍺{                   ⍝ null accumulator
            1≥⍴⍵:⍺⍺ ⍺,⍵         ⍝ short tail: apply operand to perm
            (⍺∘,¨⍵)∇¨⍵∘~¨⍵      ⍝ transfer each tail item to head
        }⍳⍵                     ⍝ for initial vector.
    }

    +perms 3
┌─────────────┬─────────────┬─────────────┐
│┌─────┬─────┐│┌─────┬─────┐│┌─────┬─────┐│
││1 2 3│1 3 2│││2 1 3│2 3 1│││3 1 2│3 2 1││
│└─────┴─────┘│└─────┴─────┘│└─────┴─────┘│
└─────────────┴─────────────┴─────────────┘

Back to: code

Back to: Workspaces