fork download
  1. function b = f(r, m, n)
  2. x = factorial(r * m) / factorial(m) ^ r;
  3. if n < 1 || x < n, b = []; return, end
  4. a = repelem(1:r, m);
  5. b = zeros(size(a));
  6. for j = 1:numel(b)
  7. y = x / numel(a);
  8. i = 1 + floor(mod(n - 1, x) / y);
  9. x = sum(a == a(i)) * y;
  10. n -= sum(a < a(i)) * y;
  11. [a(i) b(j)] = deal([], a(i));
  12. end
  13. end
  14. a = cell2mat(arrayfun(@(n) {f(9, 1, n)}, [1;2;3;123456;234567;362880]))
  15. b = cell2mat(arrayfun(@(n) {f(4, 3, n)}, [1;2;3;123456;234567;369600]))
  16.  
Success #stdin #stdout 0.15s 46208KB
stdin
Standard input is empty
stdout
a =

   1   2   3   4   5   6   7   8   9
   1   2   3   4   5   6   7   9   8
   1   2   3   4   5   6   8   7   9
   4   1   6   5   8   9   7   3   2
   6   8   4   7   5   3   2   1   9
   9   8   7   6   5   4   3   2   1

b =

   1   1   1   2   2   2   3   3   3   4   4   4
   1   1   1   2   2   2   3   3   4   3   4   4
   1   1   1   2   2   2   3   3   4   4   3   4
   2   2   2   3   3   1   4   3   4   1   1   4
   3   2   4   4   2   4   3   3   1   1   1   2
   4   4   4   3   3   3   2   2   2   1   1   1