trials.js
function (ary) {
  var shuffled = [];
  ary.reduce(function (acc, v) {
    var r = range(0, acc);
    shuffled[acc] = shuffled[r];
    shuffled[r] = v;
    return acc + 1;
  }, 0);
  return shuffled;
}
function (ary) {
  var shuffled = [];
  ary.reduce(function (acc, v) {
    var r = range(0, acc);
    shuffled[acc] = shuffled[r];
    shuffled[r] = v;
    return acc + 1;
  }, 0);
  return shuffled;
}
function ( ary ) { var shuffled = [ ] ; ary . reduce ( function ( acc , v ) { var r = range ( 0 , acc ) ; shuffled [ acc ] = shuffled [ r ] ; shuffled [ r ] = v ; return acc + 1 ; } , 0 ) ; return shuffled ; }
fisher-yates shuffle - does not modify ary
fisher - yates shuffle - does not modify ary