/* 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"]
}