Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function generateDeck(n) {
- var arr = [];
- for (var i = 1; i <= n; i ++) {
- arr.push(i);
- }
- return arr;
- }
- function shuffle(c, deck) {
- var arr = [];
- var n = deck.length;
- var left = c;
- var right = n - c;
- if (left <= right) {
- for ( var i= 0; i < c; i++) {
- arr.splice(0, 0, deck[c-i-1]);
- arr.splice(0, 0, deck[n-1-i]);
- }
- }
- if (left < right && left != right) {
- for (var i=n-c-1; i > c -1; i--) {
- arr.splice(0, 0, deck[i]);
- }
- }
- if (left > right) {
- for (var i = 0; i < c; i++) {
- if (i < right) {
- arr.splice(0,0, deck[c-i-1]);
- arr.splice(0,0, deck[n-1-i]);
- }
- }
- for (var i = n -(2*right) -1; i >=0; i--) {
- arr.splice(i,0, deck[i]);
- }
- }
- return arr;
- }
- function getIterations(arr, c) {
- var map = new Map();
- var shuffled = shuffle(c, arr);
- for (var i = 0; i < arr.length; i ++) {
- for (var j = 0; j < shuffled.length; j++) {
- if (arr[i] === shuffled[j]) {
- map.set(i, j);
- }
- }
- }
- return map;
- }
- function getIndexIterations(i, arr, c, map) {
- var end = i;
- var current = map.get(i);
- var count = 1;
- while (current != end) {
- current = map.get(current);
- count += 1;
- }
- return count;
- }
- function checkCountForAllIndices(arr, c) {
- var counts = [];
- var map = getIterations(arr, c);
- for (var i = 0; i < arr.length; i++) {
- var temp = getIndexIterations(i, arr, c, map);
- counts.push(temp)
- }
- return lcmm(counts)
- }
- function gcd(a, b) {
- var t;
- while (b != 0){
- t = b;
- b = a % b;
- a = t;
- }
- return a;
- }
- function lcm(a, b) {
- return (a * b / gcd(a, b));
- }
- function lcmm(args) {
- if(args.length == 2) {
- return lcm(args[0], args[1]);
- } else {
- var arg0 = args[0];
- args.shift();
- return lcm(arg0, lcmm(args));
- }
- }
- console.time('start');
- console.log(checkCountForAllIndices(generateDeck(1002), 101));
- console.timeEnd('start')
- // prints out:
- // 5812104600
- // start: 122.344ms
Add Comment
Please, Sign In to add comment