Guest User

Untitled

a guest
Nov 18th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. function generateDeck(n) {
  2. var arr = [];
  3. for (var i = 1; i <= n; i ++) {
  4. arr.push(i);
  5. }
  6. return arr;
  7. }
  8.  
  9. function shuffle(c, deck) {
  10. var arr = [];
  11. var n = deck.length;
  12. var left = c;
  13. var right = n - c;
  14.  
  15. if (left <= right) {
  16. for ( var i= 0; i < c; i++) {
  17. arr.splice(0, 0, deck[c-i-1]);
  18. arr.splice(0, 0, deck[n-1-i]);
  19. }
  20. }
  21. if (left < right && left != right) {
  22. for (var i=n-c-1; i > c -1; i--) {
  23. arr.splice(0, 0, deck[i]);
  24. }
  25. }
  26. if (left > right) {
  27. for (var i = 0; i < c; i++) {
  28. if (i < right) {
  29. arr.splice(0,0, deck[c-i-1]);
  30. arr.splice(0,0, deck[n-1-i]);
  31. }
  32. }
  33. for (var i = n -(2*right) -1; i >=0; i--) {
  34. arr.splice(i,0, deck[i]);
  35. }
  36. }
  37. return arr;
  38. }
  39.  
  40. function getIterations(arr, c) {
  41. var map = new Map();
  42. var shuffled = shuffle(c, arr);
  43.  
  44. for (var i = 0; i < arr.length; i ++) {
  45. for (var j = 0; j < shuffled.length; j++) {
  46. if (arr[i] === shuffled[j]) {
  47. map.set(i, j);
  48. }
  49. }
  50. }
  51. return map;
  52. }
  53.  
  54. function getIndexIterations(i, arr, c, map) {
  55. var end = i;
  56. var current = map.get(i);
  57. var count = 1;
  58. while (current != end) {
  59. current = map.get(current);
  60. count += 1;
  61. }
  62. return count;
  63. }
  64.  
  65. function checkCountForAllIndices(arr, c) {
  66. var counts = [];
  67. var map = getIterations(arr, c);
  68. for (var i = 0; i < arr.length; i++) {
  69. var temp = getIndexIterations(i, arr, c, map);
  70. counts.push(temp)
  71. }
  72. return lcmm(counts)
  73. }
  74.  
  75. function gcd(a, b) {
  76. var t;
  77. while (b != 0){
  78. t = b;
  79. b = a % b;
  80. a = t;
  81. }
  82. return a;
  83. }
  84.  
  85. function lcm(a, b) {
  86. return (a * b / gcd(a, b));
  87. }
  88.  
  89. function lcmm(args) {
  90. if(args.length == 2) {
  91. return lcm(args[0], args[1]);
  92. } else {
  93. var arg0 = args[0];
  94. args.shift();
  95. return lcm(arg0, lcmm(args));
  96. }
  97. }
  98. console.time('start');
  99. console.log(checkCountForAllIndices(generateDeck(1002), 101));
  100. console.timeEnd('start')
  101. // prints out:
  102. // 5812104600
  103. // start: 122.344ms
Add Comment
Please, Sign In to add comment