Really cool @semiquaver !!!
(
~bells = "abcdefghijklmnop";
~factorial = { |n|
var result = 1;
n.do({ |i| result = result * (i + 1) });
result;
};
~getNthPermutation = { |n, str|
var chars = str.asList;
var len = chars.size;
var result = [];
var divisor = ~factorial.(len - 1);
var remaining = n - 1;
(len - 1).do({ |i|
var quotient = (remaining / divisor).floor;
remaining = remaining % divisor;
divisor = divisor / (len - 1 - i);
result = result.add(chars.removeAt(quotient));
});
result = result.add(chars[0]);
result.join;
};
)
~getNthPermutation.(1, ~bells);
~getNthPermutation.(2, ~bells);
~getNthPermutation.(100, ~bells);