Skip to content

Instantly share code, notes, and snippets.

@theosp
Created August 16, 2013 10:03
Show Gist options
  • Save theosp/6248678 to your computer and use it in GitHub Desktop.
Save theosp/6248678 to your computer and use it in GitHub Desktop.
A play with permutations
var _ = require("underscore");
var array_size = 4;
var iterations = 200000000;
var get_array = function () {
var a = [];
for (var i = 0; i < array_size; i++) {
a.push(i);
}
return a
}
all_swaps_results = {};
half_swaps_results = {};
half_swaps_original_picked_randomly_results = {};
var random_numbers_picked = {}
for (var i = 0; i < array_size; i++) {
random_numbers_picked[i] = 0;
}
var target, swap, subject;
while (iterations !== 0) {
subject = get_array();
for (var i = 0; i < array_size; i++) {
target = (parseInt(Math.random() * 100000) % array_size);
swap = subject[target];
subject[target] = subject[i];
subject[i] = swap;
random_numbers_picked[target] += 1;
}
if (typeof all_swaps_results[subject.join("|")] !== 'undefined') {
all_swaps_results[subject.join("|")] += 1;
} else {
all_swaps_results[subject.join("|")] = 1;
}
subject = get_array();
for (var i = 0; i < Math.ceil(array_size / 2); i++) {
target = (parseInt(Math.random() * 100000) % array_size);
swap = subject[target];
subject[target] = subject[i];
subject[i] = swap;
random_numbers_picked[target] += 1;
}
if (typeof half_swaps_results[subject.join("|")] !== 'undefined') {
half_swaps_results[subject.join("|")] += 1;
} else {
half_swaps_results[subject.join("|")] = 1;
}
subject = get_array();
for (var i = 0; i < Math.ceil(array_size / 2); i++) {
origin = (parseInt(Math.random() * 100000) % array_size);
target = (parseInt(Math.random() * 100000) % array_size);
swap = subject[target];
subject[target] = subject[origin];
subject[origin] = swap;
random_numbers_picked[origin] += 1;
random_numbers_picked[target] += 1;
}
if (typeof half_swaps_original_picked_randomly_results[subject.join("|")] !== 'undefined') {
half_swaps_original_picked_randomly_results[subject.join("|")] += 1;
} else {
half_swaps_original_picked_randomly_results[subject.join("|")] = 1;
}
if (iterations % 1000000 === 0) {
console.log(iterations, _.size(random_numbers_picked), _.size(all_swaps_results), _.size(half_swaps_results), _.size(half_swaps_original_picked_randomly_results));
console.log(iterations, random_numbers_picked, all_swaps_results, half_swaps_results, half_swaps_original_picked_randomly_results);
}
iterations--;
}
console.log(iterations, _.size(random_numbers_picked), _.size(all_swaps_results), _.size(half_swaps_results), _.size(half_swaps_original_picked_randomly_results));
console.log(iterations, random_numbers_picked, all_swaps_results, half_swaps_results, half_swaps_original_picked_randomly_results);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment