var deck, deckSize, l, log2, plot, rand, results, swap, test, testCount; deckSize = 52; deck = (function() { results = []; for (var l = 0; 0 <= deckSize ? l < deckSize : l > deckSize; 0 <= deckSize ? l++ : l--){ results.push(l); } return results; }).apply(this); rand = function(min, max) { if (min == null) { min = 0; } if (max == null) { max = deckSize; } return Math.floor(Math.random() * (max - min)) + min; }; swap = function(a, b) { var ref; return ref = [deck[b], deck[a]], deck[a] = ref[0], deck[b] = ref[1], ref; }; testCount = 10000; log2 = function(x) { return Math.log(x) / Math.LN2; }; test = function() { return plot((function() { var i, n, o, p, ref, ref1, results1, results2; results1 = []; for (n = 1, ref = testCount; 1 <= ref ? n <= ref : n >= ref; 1 <= ref ? n++ : n--) { deck = (function() { results2 = []; for (var o = 0; 0 <= deckSize ? o < deckSize : o > deckSize; 0 <= deckSize ? o++ : o--){ results2.push(o); } return results2; }).apply(this); shuffle(); for (i = p = 0, ref1 = deckSize; 0 <= ref1 ? p < ref1 : p > ref1; i = 0 <= ref1 ? ++p : --p) { if (deck.indexOf(i) === -1) { throw i + " is not in the deck"; } if (deck.length !== deckSize) { throw "deck length is " + deck.length + "; should be " + deckSize; } } results1.push(deck); } return results1; })()); }; plot = function(runs) { var card, i, index, j, k, len, len1, maxValue, n, o, p, proportion, q, ref, ref1, results1, row, run, table, v, values; table = $('').appendTo('body'); row = $('').appendTo(table); for (k = n = 0, ref = deckSize; 0 <= ref ? n < ref : n > ref; k = 0 <= ref ? ++n : --n) { row.append(""); } values = (function() { var o, ref1, results1; results1 = []; for (o = 0, ref1 = deckSize; 0 <= ref1 ? o < ref1 : o > ref1; 0 <= ref1 ? o++ : o--) { results1.push((function() { var p, ref2, results2; results2 = []; for (p = 0, ref2 = deckSize; 0 <= ref2 ? p < ref2 : p > ref2; 0 <= ref2 ? p++ : p--) { results2.push(0); } return results2; })()); } return results1; })(); maxValue = values.reduce(function(m, arr) { return Math.max(m, Math.max.apply(null, arr)); }, 0); proportion = 255 / maxValue; for (o = 0, len = runs.length; o < len; o++) { run = runs[o]; for (index = p = 0, len1 = run.length; p < len1; index = ++p) { card = run[index]; values[card][index]++; } } results1 = []; for (i = q = 0, ref1 = deckSize; 0 <= ref1 ? q < ref1 : q > ref1; i = 0 <= ref1 ? ++q : --q) { row = $('').appendTo(table); row.append(""); results1.push((function() { var len2, r, ref2, results2; ref2 = values[i]; results2 = []; for (r = 0, len2 = ref2.length; r < len2; r++) { v = ref2[r]; j = v * proportion; results2.push(row.append("")); } return results2; })()); } return results1; }; // --- // generated by coffee-script 1.9.2
" + k + "
" + i + "