Can Supercollider compute the bells of St Martins Church, Birmingham?

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);
1 Like