/* This is a proposed solution for Patrick Honner's question about scoring the "correctness" of an ordered list. It uses the Levenshtein-Damerau edit distance (eliminating outright replacements) to calculate how many insertions, deletions, and adjacent character swaps it would take to turn one sequence into the "right" one. The arguments are: editDistanceDamerau[str1, str2, deleteCost, insertCost, replaceCost, swapCost] In this sample, replaceCost is set very high to eliminate replacements. See: http://mrhonner.com/archives/10229 */ opts = ["A","B","C","D"] correct = join["", opts] // Generate all permutations of the list in lexicographic order. for p = opts.lexicographicPermute[] { // Turn the permuted array back into a string. alt = join["", p] // The 1000 here is the replacement cost, made to be higher than the length // of the string, effectively making the algorithm ignore replacements. score = editDistanceDamerau[alt, correct, 1, 1, 1000, 1] println["$alt\t$score"] }