List Permutations in Tutorials & Snippets
|
|
proc permutations(list/L) if(L.len > 1) var/list/result = list(list(L[2],L[1]), list(L[1],L[2])) for(var/i in 3 to L.len) for(var/j=1, j<=result.len, j+=i) var/list/temp = result[j] for(var/k=1, k<i, ++k) result.Insert(j, 1) result[j] = temp.Copy() for(var/j=1, j<=result.len, j+=i) for(var/k=1, k<=i, ++k) var/list/temp = result[j+k-1] temp.Insert(k, L[i])
return result else return list(list(L[1]))
client/verb/Print(i as num) if(i && i>0) var/list/base = new for(var/j in 1 to i) base.Add(j) var/list/permutations = permutations(base) src << "Permutation of [i] [i==1?"element":"elements"]:" for(var/list/permutation in permutations) for(var/j=1, j<permutation.len, ++j) src << "[permutation[j]], \..." src << "[permutation[permutation.len]]"
|
|