#!/usr/bin/ruby

# https://rosettacode.org/wiki/Best_shuffle#Sidef

func best_shuffle(original_word) {

    var s = original_word.chars;
    var t = s.shuffle;

    s.range.each { |i|
        s.range.each { |j|
            i == j || (
                  (t[i] == s[j]) ||
                  (t[j] == s[i])
            ) && next;
            t[i, j] = t[j, i];
            break;
        }
    }

    var word = t.join('');
    [word, original_word ^ word -> count("\0")];
}

<abracadabra seesaw elk grrrrrr up a>.each { |word|
    var (sword, score) = best_shuffle(word)...;
    "%s, %s: %d\n".printf(word, sword, score);
}