SHOW:
|
|
- or go back to the newest paste.
1 | /* | |
2 | This demonstrative program should be used for either documentation or instructive purposes only, | |
3 | and goes without any warranty whatsoever. | |
4 | ||
5 | This is part of: The On-Line Encyclopedia Of Integer Sequences OEIS(TM) | |
6 | ||
7 | Visit: http://www.oeis.org/A055881 | |
8 | ||
9 | Author: Joerg Arndt (www.jjj.de), Dec 12 2012 | |
10 | Pastebin by: R. J. Cano (remy@ula.ve), Dec 17 2012 | |
11 | ||
12 | */ | |
13 | ||
14 | perm(n)= | |
15 | /* Compute the first n! terms of A055881 by counting | |
16 | in rising factorial base. | |
17 | Generate all permutations of n along the way. | |
18 | */ | |
19 | { | |
20 | my( fc=vector(n) ); /* mixed radix numbers (rising factorial base) */ | |
21 | my( ct=0, j, a=0 ); | |
22 | my( p=vector(n,k,k-1) ); /* permutation */ | |
23 | my( k, t ); /* for permutations */ | |
24 | while ( 1, | |
25 | print1(ct, ": ", p); /* permutation */ | |
26 | print1(" ", a ); /* A055881(ct): position of rightmost change in fc[] */ | |
27 | print1(" ", fc); /* factorial number */ | |
28 | print(); | |
29 | ct += 1; | |
30 | ||
31 | /* increment factorial number fc[]: */ | |
32 | j = 1; | |
33 | while ( fc[j] == j, fc[j]=0; j+=1; ); /* scan over nines */ | |
34 | if ( j==n, return() ); /* current is last */ | |
35 | fc[j] += 1; | |
36 | /* update permutation p[], reverse prefix of length j+1: */ | |
37 | a = j; /* next term of A055881 */ | |
38 | j += 1; k = 1; | |
39 | while ( k < j, | |
40 | t=p[j]; p[j]=p[k]; p[k]=t; | |
41 | k+=1; j-=1; | |
42 | ); | |
43 | ); | |
44 | } | |
45 | ||
46 | print("Demonstration: Reproduces the example given in the comments section for A055881"); | |
47 | perm(4); | |
48 | print(" "); | |
49 | print("You are free to call perm() and experiment with it. When finished, type \"quit\" to exit."); | |
50 | print(" "); |