#/*********************************************************** # permfac.rb -- 界误 #***********************************************************/ # 超捐渴恕との陵高恃垂 N = 4 $a = [] def encode (N - 1).downto(1) do |j| for k in 0...j if ($a[k] > $a[j]); $a[k] -= 1; end end end end def decode for j in 1...N (j - 1).downto(0) do |k| if ($a[k] >= $a[j]); $a[k] += 1; end end end end def nextperm i = 1 $a[N] = -1; # 戎客 while ($a[i] >= $a[i - 1]); i += 1; end if (i == N); return 0; end # 窗位 j = 0 while ($a[i] >= $a[j]); j += 1; end t = $a[i]; $a[i] = $a[j]; $a[j] = t i -= 1; j = 0 while (i > j) t = $a[i]; $a[i] = $a[j]; $a[j] = t; i -= 1; j += 1 end return 1; # 踏位 end count = 0 for i in 0...N; $a[i] = N - i - 1; end begin count += 1 printf("%5d: ", count) (N - 1).downto(0) {|i| printf("%4d", $a[i]) } printf("\n") encode() printf("%5d: ", count) (N - 1).downto(1) {|i| printf("%4d", $a[i]) } printf("\n") decode() printf("%5d: ", count) (N - 1).downto(0) {|i| printf("%4d", $a[i]) } printf("\n\n") end while (nextperm() == 1) exit 0